bash - lenguaje - ¿Cómo ejecutar ''cd'' en el script de shell y permanecer allí después de que termine el script?
change directory shell script (5)
Usé ''change directory'' en mi script de shell (bash)
#!/bin/bash
alias mycd=''cd some_place''
mycd
pwd
pwd
imprime some_place
correctamente, pero después de que el script finalizó, mi actual directorio de trabajo no cambia.
¿Es posible cambiar mi ruta por script?
El script se ejecuta en una subshell separada. Esa subshell cambia el directorio, no el shell en el que lo ejecuta. Una posible solución es source
el script en lugar de ejecutarlo:
# Bash
source yourscript.sh
# or POSIX sh
. yourscript.sh
Necesitas obtener el archivo como:
. myfile.sh
o
source myfile.sh
Sin abastecimiento, los cambios ocurrirán en el subconjunto y no en el shell primario que invoca el script. Pero cuando obtiene un archivo, las líneas del archivo se ejecutan como si se escribieran en la línea de comando.
Se puede lograr mediante el abastecimiento. El aprovisionamiento es básicamente ejecutar el script en el mismo shell, mientras que la ejecución normal ( sh test.sh
o ./test.sh
) creará el subcuadro y ejecutará el script allí.
test.sh
cd development/
ls
# Do whatever you want.
Ejecute test.sh
por
source test.sh
.
es la notación más corta para la source
. Entonces también puedes hacer
. test.sh
Esto ejecutará el script y cambiará el directorio de shell actual a development/
.
Si bien la búsqueda del script que desea ejecutar es una solución, debe tener en cuenta que este script puede modificar directamente el entorno del shell actual. Además, ya no es posible pasar argumentos.
Otra forma de hacerlo es implementar tu script como una función en bash.
function cdbm() {
cd whereever_you_want_to_go
echo arguments to the functions were $1, $2, ...
}
Esta técnica es utilizada por autojump: http://github.com/joelthelion/autojump/wiki para proporcionarle el aprendizaje de los marcadores del directorio de shell.
cada vez que ejecuta una secuencia de comandos en su shell de inicio de sesión, se genera un nuevo subproceso y la ejecución del script se realiza en una subshell. Una vez que se completa la secuencia de comandos, la subshell se cierra y se devuelve al shell de inicio de sesión.Hace cada vez que hace un cd a través de script, el directorio se cambia a la ruta especificada por cd, pero cuando termina el script, vuelve al shell de inicio de sesión al directorio de trabajo desde donde comenzó el script.
La forma de superar esto es el uso,
source yourscript.sh
lo que hace es ejecutar el script como script TCL, es decir, tiene el mismo efecto que cuando escribiste cada línea en la línea de comando de tu shell de inicio de sesión y se ejecutó desde allí. De esta forma, cuando el script finaliza después de cd, permanece en ese directorio.