Shell script

Fermé
Utilisateur anonyme - 28 sept. 2005 à 09:27
 Utilisateur anonyme - 28 sept. 2005 à 12:20
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 6187 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 14 juin 2024 1 088
28 sept. 2005 à 10:42
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
28 sept. 2005 à 11:40
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 6187 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 14 juin 2024 1 088
28 sept. 2005 à 12:03
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 6187 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 14 juin 2024 1 088
28 sept. 2005 à 12:14
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
28 sept. 2005 à 12:20
J'essaye ça ce soir...
Merci encore.
0