Cómo ejecutar 'cd' en el script de shell y permanecer allí después de acabados de guión?

StackOverflow https://stackoverflow.com/questions/3879431

  •  28-09-2019
  •  | 
  •  

Pregunta

he usado 'cambio de directorio' en mi script de shell (bash)

#!/bin/bash
alias mycd='cd some_place'
mycd
pwd

pwd impresiones some_place correctamente, pero después de que el guión terminado mi directorio de trabajo actual no cambia.

¿Es posible cambiar mi camino por el guión?

¿Fue útil?

Solución

Es necesario a la fuente el archivo como:

. myfile.sh

o

source myfile.sh

Sin abastecimiento de los cambios que sucederá en el sub-shell y no en la cáscara de los padres que se invoca el script. Pero cuando un archivo fuente de las líneas en el archivo se ejecutan como si se escribieron en la línea de comandos.

Otros consejos

El script se ejecuta en un subnivel separada. Subnivel que los cambios de directorio, no el intérprete lo ejecuta en una posible solución es source la secuencia de comandos en lugar de ejecutarlo:.

# Bash
source yourscript.sh
# or POSIX sh
. yourscript.sh

Mientras abastecimiento de la secuencia de comandos que desea ejecutar es una solución, se debe tener en cuenta que este script se puede modificar directamente el ambiente de su shell actual. Además, no es posible pasar argumentos más.

Otra forma de hacerlo, es implementar la secuencia de comandos 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 se utiliza por autojump: http://github.com/joelthelion/autojump/wiki para ofrecerle el aprendizaje marcadores de directorio de concha.

Se puede lograr por abastecimiento. Sourcing es básicamente ejecutar la secuencia de comandos en la misma carcasa mientras que la ejecución normal (sh test.sh o ./test.sh) creará sub shell y ejecutar la escritura de allí.

test.sh

cd development/
ls
# Do whatever you want.

Ejecutar test.sh por

source test.sh

. es más corto notación para source. Así también se puede hacer por

. test.sh

Esto ejecutará la secuencia de comandos y cambie el directorio de shell actual a development/.

cada vez que se ejecuta un guión del intérprete de comandos de inicio de sesión, un nuevo subproceso se genera y la ejecución del script se realiza en un subshell.Once que se complete el script, las salidas subshell y volverá a la shell.Hence de inicio de sesión cada vez que se hace una CD a través de una secuencia de comandos, el directorio se cambia a la ruta especificada por cd, sino por los acabados de guión vez que vuelva a su intérprete de ingreso al directorio de trabajo desde donde se inició la secuencia de comandos.

La forma de conseguir esto es el uso,

source yourscript.sh

lo que hace es fuente se ejecuta el script como TCL escritura, es decir que tiene el mismo efecto que al escribir cada línea en la línea de comandos de la shell de registro y se ejecuta desde allí. Así de esta manera cuando termina la secuencia de comandos después cd, se queda en ese directorio.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top