Shell script
Utilisateur anonyme
-
Utilisateur anonyme -
Utilisateur anonyme -
Salut à toutes et tous,
Je débute en UNIX sous mac (et en UNIX tout court).
Je fais de-ci de-là des essais de script dans le shell (bash).
Quelqu'un pourrait-il m'expliquer pourquoi ceci ne fonctionne pas?
Je m'explique: la commande
semble n'avoir d'effet que dans le script. Une fois le script exécuté, je me retrouve dans le répertoire de départ.
Par exemple, en modifiant le script de la façon suivante:
et en l'utilisant de la façon suivante (je me trouves dans le répertoire /Users/LeLaid):
le résultat est:
Le dernier prompt me dit que je n'ai pas changé de répertoir.
En effet:
donne
Pourquoi????
Merci d'avance pour vos lumières.
P.
Je débute en UNIX sous mac (et en UNIX tout court).
Je fais de-ci de-là des essais de script dans le shell (bash).
Quelqu'un pourrait-il m'expliquer pourquoi ceci ne fonctionne pas?
pushd ( )
{
dirname=$1
DIR_STACK="$dirname ${DIR_STACK:-$PWD' '}"
cd ${dirname:?"missing directory name."}
echo "$DIR_STACK"
}
Je m'explique: la commande
cd ${dirname:?"missing directory name."}
semble n'avoir d'effet que dans le script. Une fois le script exécuté, je me retrouve dans le répertoire de départ.
Par exemple, en modifiant le script de la façon suivante:
m_pushd ( )
{
dirname=$1
DIR_STACK="$dirname ${DIR_STACK:-$PWD' '}"
echo "$DIR_STACK"
echo ${dirname:?"missing directory name."}
cd ${dirname:?"missing directory name."}
echo $PWD
}
et en l'utilisant de la façon suivante (je me trouves dans le répertoire /Users/LeLaid):
LeLaid: ~/ $ m_pushd /bin
le résultat est:
/bin /Users/LeLaid /bin /bin LeLaid: ~/ $
Le dernier prompt me dit que je n'ai pas changé de répertoir.
En effet:
$ pwd
donne
/Users/LeLaid
Pourquoi????
Merci d'avance pour vos lumières.
P.
A voir également:
- Shell script
- Classic shell - Télécharger - Personnalisation
- Script vidéo youtube - Guide
- Ghost script - Télécharger - Polices de caractères
- Mas script - Accueil - Windows
- Script cmd - Guide
4 réponses
Salut LeLaid,
Lorsque tu lances ton script shell, celui-ci crée un nouveau processus ("fils"), qui a son propre environnement (et son propre emplacement de répertoire courant).
Lorsque le script se termine, tu reviens à l'environnement "père" et à son propre emplacement de répertoire courant.
Dal
Lorsque tu lances ton script shell, celui-ci crée un nouveau processus ("fils"), qui a son propre environnement (et son propre emplacement de répertoire courant).
Lorsque le script se termine, tu reviens à l'environnement "père" et à son propre emplacement de répertoire courant.
Dal
Bon, ok,... mais comment exécuter un cd dans un script alors?
Comment faire en sorte que, après l'exécution d'un script, le répertoire change dans le processus parent?
Merci pour tes lumières
Comment faire en sorte que, après l'exécution d'un script, le répertoire change dans le processus parent?
Merci pour tes lumières
Re :)
Il est possible, à l'intérieur d'un script shell, d'en appeler un autre et de l'exécuter dans le même processus (avec "." ou "source" selon le shell utilisé).
S'agissant du processus de ton invite de commande, tu peux tenter la même chose. Par exemple, avec bash, en appelant ton script à partir de l'invite de commande en faisant
source monscript.sh
Ce n'est pas très pratique (car tu dois lancer le script précédé de "source"), mais çà devrait marcher. Le changement de répertoire devrait alors affecter le répertoire courant de ton shell.
Il y a peut être un moyen plus commode, mais je ne le connais pas.
Dal
Il est possible, à l'intérieur d'un script shell, d'en appeler un autre et de l'exécuter dans le même processus (avec "." ou "source" selon le shell utilisé).
S'agissant du processus de ton invite de commande, tu peux tenter la même chose. Par exemple, avec bash, en appelant ton script à partir de l'invite de commande en faisant
source monscript.sh
Ce n'est pas très pratique (car tu dois lancer le script précédé de "source"), mais çà devrait marcher. Le changement de répertoire devrait alors affecter le répertoire courant de ton shell.
Il y a peut être un moyen plus commode, mais je ne le connais pas.
Dal