91 votes

Comment exécuter 'cd' dans un script shell et y rester après la fin du script?

J'ai utilisé 'change directory' dans mon script shell (bash)

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

pwd imprime correctement some_place , mais une fois le script terminé, mon répertoire de travail actuel ne change pas.

Est-il possible de changer mon chemin par script?

98voto

codaddict Points 154968

Vous devez source le fichier comme:

 . myfile.sh
 

ou

 source myfile.sh
 

Sans sourcing, les modifications se produiront dans le sous-shell et non dans le shell parent qui appelle le script. Mais lorsque vous sourcez un fichier, les lignes du fichier sont exécutées comme si elles étaient saisies sur la ligne de commande.

21voto

thomasd Points 304

Alors que la recherche de script que vous souhaitez exécuter est une solution, vous devez être conscient que ce script peut ensuite les modifier directement l'environnement de votre shell courant. Aussi il n'est pas possible de passer des arguments plus.

Une autre façon de faire, est de mettre en œuvre votre script une fonction dans bash.

function cdbm() {
    cd whereever_you_want_to_go
     echo arguments to the functions were $1, $2, ...
}

Cette technique est utilisée par autojump: http://github.com/joelthelion/autojump/wiki pour vous fournir de l'apprentissage shell répertoire de signets.

18voto

schot Points 5809

Le script est exécuté dans un sous-shell distinct. Ce sous-shell change de répertoire, pas le shell dans lequel vous l'exécutez. Une solution possible est de source le script au lieu de l'exécuter:

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

4voto

Fizer Khan Points 4128

Il peut être atteint que par l'approvisionnement. Sourcing est fondamentalement exécuter le script dans le même shell alors que l'exécution normale(sh test.sh ou ./test.sh) permettra de créer des sous-shell et exécuter le script il.

test.sh

cd development/
ls
# Do whatever you want.

Exécuter test.sh par

source test.sh

. est la plus courte notation en source. Alors vous pouvez aussi le faire

. test.sh

Cela permettra d'exécuter le script et modifier le répertoire de shell en cours d' development/.

2voto

dig_123 Points 377

chaque fois que vous exécutez un script sur votre shell de connexion, un nouveau sous-processus est disponible et à l'exécution de script est fait dans un shell interne est exécuté.Une fois le script terminé, le shell interne est exécuté sorties et vous êtes redirigé vers la de login shell.Donc chaque fois que vous faites un cd par l'intermédiaire d'un script,le répertoire est modifié le chemin d'accès spécifié par le cd, mais au moment où le script est terminé, vous revenez à votre shell de connexion vers le répertoire de travail à partir d'où vous avez lancé le script.

La façon de surmonter ce problème est l'utilisation,

source yourscript.sh

de quelle source ne s'agit-il exécute le script de script TCL, j'.e il a le même effet que lors de la saisie de chaque ligne sur la ligne de commande de votre shell de connexion et de l'exécuter à partir de là. Ainsi, de cette façon lorsque le script se termine après le cd , il reste dans ce répertoire.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X