Comment exécuter « cd » dans le script shell et y rester après la fin de script?

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

  •  28-09-2019
  •  | 
  •  

Question

je 'changer le répertoire' dans mon script shell (bash)

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

pwd imprime some_place correctement, mais après le script terminé mon répertoire de travail ne change pas.

Est-il possible de changer mon chemin par le script?

Était-ce utile?

La solution

Vous devez localiser le fichier comme:

. myfile.sh

ou

source myfile.sh

Sans approvisionnement les changements qui se passera dans la sous-shell et non dans le shell parent qui invoque le script. Mais quand vous la source d'un fichier les lignes dans le fichier sont exécutées comme si elles étaient tapées à la ligne de commande.

Autres conseils

Le script est exécuté dans un sous-shell séparé. Ce répertoire change sous-shell, pas le shell que vous utilisez dans une solution possible est de source le script au lieu de l'exécuter.

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

Alors que l'approvisionnement du script que vous voulez exécuter est une solution, vous devez savoir que ce script peut alors modifier directement l'environnement de votre shell en cours. En outre, il est impossible de passer des arguments plus.

Une autre façon de faire, est de mettre en œuvre votre script en 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 l'apprentissage des signets de répertoire shell.

Il peut être réalisé par l'approvisionnement. Sourcing est essentiellement exécuter le script dans la même coquille tandis que l'exécution normale (sh test.sh ou ./test.sh) va créer shell sous 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 pour la notation source. Ainsi, vous pouvez aussi le faire par

. test.sh

exécutera le script et changer le répertoire du shell en cours à development/.

chaque fois que vous exécutez un script sur votre shell de connexion, une nouvelle sous-processus a donné naissance et l'exécution du script se fait dans un subshell.Once les finalise de script, les sorties de sous-shell et vous revenez à la connexion shell.Hence chaque fois que vous faites une cd via un script, le répertoire est modifié au chemin spécifié par cd, mais par les finitions de script fois que vous revenez à votre shell de connexion au répertoire de travail où vous avez commencé le script.

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

source yourscript.sh

quelle source est-il exécute le script en tant que script TCL, i.e. il a le même effet que lorsque vous avez tapé chaque ligne sur la ligne de commande de votre shell de connexion et exécutée à partir de là. Ainsi, cette façon lorsque les finitions de script après cd, il reste dans ce répertoire.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top