Usar $SHELLal final

Usar $SHELLal final

Sólo quiero escribir un guión quecambia mi directorio.

Puse los siguientes comandos en el archivo./home/alex/pathABC

#!/bin/sh
cd /home/alex/Documents/A/B/C
echo HelloWorld

Hice

chmod +x pathABC

En la Terminal, mientras estaba en /home/alex, ejecuté ./pathABC, pero el resultado es solo HelloWorldy el directorio actual no cambia.

Entonces, ¿qué pasa?

Respuesta1

Como han explicado otros, el directorio se cambia en el proceso secundario de su script, no en el proceso de terminal desde el cual se llama el script. Después de que el proceso secundario muere, regresa a la terminal que se deja donde estaba.

Varias alternativas:

1. Vínculo simbólico

Coloque un enlace simbólico en su hogar al camino largo al que desea acceder fácilmente

$ ln -s /home/alex/Documents/A/B/C ~/pathABC

luego acceda al directorio con:

$ cd ~/pathABC

2. Alias

Pon un alias en tu ~/.bashrc:

alias pathABC="cd /home/alex/Documents/A/B/C"

(deaquí)

3. Función

Cree una función que cambie el directorio, la función se ejecuta en el proceso de su terminal y luego puede cambiar su directorio.

(deaquí)

4. Evite correr cuando sea niño

Obtenga su script en lugar de ejecutarlo. El abastecimiento (realizado por .o source) hace que el script se ejecute en el mismo shell en lugar de ejecutarse en su propio subshell.

$ . ./pathABC

(deaquíyaquí)

5. vars compatibles con cd

Configure la cdable_varsopción en su ~/.bashrcy cree una variable de entorno en el directorio:

shopt -s cdable_vars
export pathABC="/home/alex/Documents/A/B/C"

Entonces puedes usarcd pathABC

(deaquí)

Respuesta2

Cuando ejecuta un script en una Terminal, se ejecuta un proceso secundario. En este programa hijo, es decir, su script cambiará a cualquier directorio especificado. Pero en el proceso principal, es decir, donde ejecuta el script, todavía se encuentra en la ruta anterior. O simplemente podemos decir:

El alcance del comando cd es solo para el proceso hijo, no para el padre.

Respuesta3

Estás cometiendo un error de pensamiento. Mientras que la corrientecaparazónpermanece en el mismo directorio, elguionse ha movido al nuevo directorio.

Podrías ver eso creando otro script en elnuevodirectorio y ejecutarlo desde su script, después de que haya cambiado de directorio:

#!/bin/sh
cd /home/alex/Documents/A/B/C && ./another_script.sh # (if it is executable)

El segundo script se ejecutaría desde el nuevo directorio.

HelloWorld 

es solo el resultado del script.

Respuesta4

Usar $SHELLal final

Un script bash opera en su entorno actual o en el de sus hijos, pero nunca en su entorno padre.

Sin embargo, esta pregunta a menudo se hace porque uno quieredejarse en un símbolo del sistema en un directorio determinado después de la ejecuciónde un script desde otro directorio.

Si este es el caso, simplementeejecutar una $SHELLinstancia secundariaal final del guión:

# !/usr/bin/env bash
cd /home/alex/Documents/A/B/C
echo -e '\nHit [Ctrl]+[D] to exit this child shell.'
$SHELL

Para volver a la instancia de shell principal anterior, utilice Ctrl+ D.

información relacionada