Shell script

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?
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:

4 réponses

[Dal] Messages postés 6373 Statut Contributeur 1 106
 
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
0
Utilisateur anonyme
 
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
0
[Dal] Messages postés 6373 Statut Contributeur 1 106
 
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
0
[Dal] Messages postés 6373 Statut Contributeur 1 106
 
Un autre truc me vient à l'esprit...

Si tout ce que tu veux c'est changer de répertoire, tu pourrais aussi créer un "alias" au lieu d'un script.

man alias


Dal
0
Utilisateur anonyme
 
J'essaye ça ce soir...
Merci encore.
0