Forum Programmation.ruby Exécution de script dans l'environnement du Shell courant

Posté par  .
Étiquettes : aucune
0
7
juil.
2004
Bonjour,

J'ai réalisé un script Ruby modifiant entre autre la variable PATH de mon Shell et j'aurais aimé que cette modification soit persistante une fois le script arrêté.

En gros, je cherche l'équivalent de la commande 'source' de Bash en Ruby :). Ceci afin d'éviter que Bash ne me lance un nouvel environnement pour mon script.

J'ai bien une solution un peu grouik mais elle ne me satisfait pas : faire des export (ou setenv) avec la commande system (ou exec) pour modifier le shell père du script Ruby.

J'ai essayé de passer mon script comme alias ou comme fonction dans mon bash, mais ça ne semble pas marcher (en fait y'a pas trop de raison que ça marche :).

Quelqu'un aurait-il une idée avant que je me rabatte sur la solution grouik ? J'imagine que ce problème se pose aussi avec des scripts Perl et Python.

Merci d'avance.
  • # Pas possible, meme de maniere 'grouik'

    Posté par  (site web personnel) . Évalué à 2.

    Tu ne peut pas changer l'environement du shell pere, ni 'proprement' ni 'grouikement'.

    D'une c'est son environnement et c'est privé ce genre de choses, de l'autre les 'commandes' setenv et export ne sont pas des programmes mais des fonctions du shell qui sont parsées par son interpréteur (si tu veut la liste tape 'help' dans un shell bash).

    Tu peut lancer un shell fils en en modifiant l'environnement, mais c'est tout.

    La seule methode possilbe consistant a faire un
    export PATH=`/path/to/script`
    ou s'il y a plusieurs variables, modifier ton script pour qu'il crée un script shell: ex en shell:
    echo "export PATH=/usr/bin:/bin:/path/specifique/au/script"
    echo "export MANPATH=/path/specifique/au/script"
    echo "echo \"done\""

    et reinterpréter cela via le shell
    /path/to/script | /bin/sh
    ou
    /path/to/script &> /tmp/tmpfile.XXX.sh && source /tmp/tmpfile.XXX.sh
    • [^] # Re: Pas possible, meme de maniere 'grouik'

      Posté par  . Évalué à 2.

      /path/to/script | /bin/sh
      Ça je doute que ça marche, les processus du pipe étant des fils.

      /path/to/script &> /tmp/tmpfile.XXX.sh && source /tmp/tmpfile.XXX.sh
      Ça par contre, c'est aussi ce que je ferais perso. Enfin plutôt :
      # eval $(/path/to/script)
      personellement, mais c'est la même idée.
      • [^] # Re: Pas possible, meme de maniere 'grouik'

        Posté par  . Évalué à 2.

        Merci,

        En fait, je suis arrivé à la même conclusion en faisant mes tests :).

        Y'a aussi un `./script.rb` qui marche si le script n'affiche que des commandes du SHELL (export TOTO=titi).

        Mais au final, je vais peut être passer par un fichier temporaire pour exécuter mes commandes shell.

        En tout cas merci pour vos réponses, j'avais peur que les forums ne soit pas trop lu.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.