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.

--
Rien n'est plus dangereux qu'une idée quand on a 
qu'une idée
  :-)

4 réponses

  1. [Dal] Messages postés 6122 Date d'inscription   Statut Contributeur Dernière intervention   1 108
     
    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
  2. 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
  3. [Dal] Messages postés 6122 Date d'inscription   Statut Contributeur Dernière intervention   1 108
     
    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
    1. [Dal] Messages postés 6122 Date d'inscription   Statut Contributeur Dernière intervention   1 108
       
      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
  4. Utilisateur anonyme
     
    J'essaye ça ce soir...
    Merci encore.
    0