Sortir d'un script dans un repertoire défini

hexomon Messages postés 65 Statut Membre -  
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,

Je suis sur un Aix et je suis en train de faire un script où à un moment l'utilisateur doit pouvoir sortir du script dans un repertoire précis spécifié par mes soins.

J'ai testé un simple "cd /truc/bidule", mais ça ne marche pas. Au pif, j'ai essayé "exit /truc/bidule" mais sans résultat. Si ça dit quelque chose à quelqu'un, merci d'avance :)

Bonne journée,

Hexomon

6 réponses

  1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Salut,
    {
    cd /truc/bidule
    }
    ;-))
    0
  2. hexomon Messages postés 65 Statut Membre 1
     
    Merci beaucoup :) Mais j'ai testé et ça ne fonctionne pas: quand je sors du script je suis toujours dans le même repertoire.

    A + :)

    Hexomon
    0
  3. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Oups, je suis allé un peu vite, ça c'est pour exécuter des commandes dans l'environnement du shell père...

    Donc voilà une solution, en fait il faut sourcer le script et en faire de même avec un fichier temporaire contenant le répertoire voulu :
    [tmpfs]$ cat foo.sh
    
    #! /bin/bash
    
    echo -e "Je suis dans le répertoire : \c"
    pwd
    {
    echo "J'entre dans le répertoire racine..."
    echo 'cd /' | tee  fich.tmp
    source fich.tmp
    echo -e "Je suis dans le répertoire : \c"
    pwd
    }
    
    [tmpfs]$ pwd
    /home/jp/tmpfs
    
    [tmpfs]$ . ./foo.sh
    
    Je suis dans le répertoire : /home/jp/tmpfs
    J'entre dans le répertoire racine...
    cd /
    Je suis dans le répertoire : /
    
    [/]$ pwd
    /
    [/]$
    Attention toutefois, pas de commande "exit" dans le script sous peine de se voir déconnecter ;-((

    ;-))
    0
  4. hexomon Messages postés 65 Statut Membre 1
     
    Je vais tester ça :)

    Encore merci et bonne journée

    Hexomon
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. tatoute
     
    au sens strict il n'y a pas de moyen qu'un script (qui est un programme distinct de ton shell) puisse changer le repertoire de ton shell.

    Note que la commande cd n'est pas un programme,'est un mot clef du shell.

    La seule solution c'est que ce soit ton shell lui même qui execute tout ou partie du script.

    Il y a deux solutions pour cela:

    utiliser la commande point, "." qui fait executer par ton shell une suite de commandes contrenues dans un fichier, et revient ensuite au clavier.

    mais ce n'est pas satisfaisant car l'utilisateur va oublier le "."

    l'autre solution (en bash) est de faire une commande shell

    ~$ gotmp() {
    > cd /tmp/
    > }
    ~$ gotmp
    /tmp$

    que tu mettra dans le .profile

    Voila
    0
  7. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Merci pour ces explications, mais quleques petits points à éclaircir ;-))

    Note que la commande cd n'est pas un programme,c'est un mot clef du shell.
    En fait de mot clé, c'est juste une commande interne du shell (builtin)

    utiliser la commande point, "." qui fait executer par ton shell une suite de commandes contrenues dans un fichier
    La commande s'appelle "source" et peut être appelée soit par son nom "source fichier" soit par sa forme abrégée "." (point).

    l'autre solution (en bash) est de faire une commande shell
    On appelle cela une fonction.

    Et je pense que pour être efficace, peut être vaudrait-il mieux y adjoindre la possibilité de tenir compte d'un argument passé en paramètre, non ?
    gotorep() {
    cd "$1"
    }
    ;-))

    0