OVH Cloud OVH Cloud

[ZSH] pb de script

3 réponses
Avatar
Laurent
#!/usr/local/zsh

echo $CVSROOT
export CVSROOT="TEST"
echo $CVSROOT

Pourquoi avoir executer le script suivant, la var CVSROOT n'est pas
positionnée à TEST lorsque je l'évalue au prompt ? Si j'exécute le
script : $ zsh test.zsh, CVSROOT à la valeur TEST, une fois le script
terminé, si je fais ensuite, au prompt, echo $CVSROOT, CVSROOT a
conservé l'ancienne valeur ?

Cordialement
Laurent

3 réponses

Avatar
kilobug

#!/usr/local/zsh
echo $CVSROOT
export CVSROOT="TEST"
echo $CVSROOT


Pourquoi avoir executer le script suivant, la var CVSROOT n'est pas
positionnée à TEST lorsque je l'évalue au prompt ? Si j'exécute le
script : $ zsh test.zsh, CVSROOT à la valeur TEST, une fois le script
terminé, si je fais ensuite, au prompt, echo $CVSROOT, CVSROOT a
conservé l'ancienne valeur ?


export change l'environement du processus courant (le shell qui
exécute export), ainsi que celui des processus fils qui seront lancés
à partir de maintenant par ce shell là.

export ne change aucunement l'environement des processus pères (ni
celui des fils lancés avant l'export).

Quand tu fais zsh test.zsh (ou ./test.zsh) tu lances un nouveau shell,
qui se quitte à la fin du script.

Si tu veux évaluer les lignes dans le shell courant, sans en lancer un
autre, il faut faire: source ./test.zsh (ou . ./test.zsh)

--
Gael Le Mignot "Kilobug" - - http://kilobug.free.fr
GSM : 06.71.47.18.22 (in France) ICQ UIN : 7299959
Fingerprint : 1F2C 9804 7505 79DF 95E6 7323 B66B F67B 7103 C5DA

Member of HurdFr: http://hurdfr.org - The GNU Hurd: http://hurd.gnu.org

Avatar
Stephane Chazelas
2004-09-20, 12:44(+02), Gaël Le Mignot:
[...]
Si tu veux évaluer les lignes dans le shell courant, sans en lancer un
autre, il faut faire: source ./test.zsh (ou . ./test.zsh)


Une alternative avec zsh est de mettre la commande dans le $fpath
au lieu du $path. Le script pourra alors etre consideré comme
une fonction autoloadable qu'on peut eventuellement precompiler.

$ cat /tmp/mes-fonctions/foo
fooºr
$ fpath+=(/tmp/mes-fonctions)
$ foo
zsh: command not found: foo
$ autoload foo
$ foo
$ echo $foo
bar
$ zcompile /tmp/mes-fonctions/foo
$ ll /tmp/mes-fonctions
total 32
-rw-r--r-- 1 chazelas users 8 Sep 21 10:49 foo
-r--r--r-- 1 chazelas users 248 Sep 21 10:51 foo.zwc

--
Stephane

Avatar
Laurent
On 2004-09-21, Stephane Chazelas wrote:
2004-09-20, 12:44(+02), Gaël Le Mignot:
[...]
Si tu veux évaluer les lignes dans le shell courant, sans en lancer un
autre, il faut faire: source ./test.zsh (ou . ./test.zsh)


Une alternative avec zsh est de mettre la commande dans le $fpath
au lieu du $path. Le script pourra alors etre consideré comme
une fonction autoloadable qu'on peut eventuellement precompiler.

$ cat /tmp/mes-fonctions/foo
fooºr
$ fpath+=(/tmp/mes-fonctions)
$ foo
zsh: command not found: foo
$ autoload foo
$ foo
$ echo $foo
bar
$ zcompile /tmp/mes-fonctions/foo
$ ll /tmp/mes-fonctions
total 32
-rw-r--r-- 1 chazelas users 8 Sep 21 10:49 foo
-r--r--r-- 1 chazelas users 248 Sep 21 10:51 foo.zwc

J'ai résolu le problème en définissant une fonction dans mon


.zshrc.

Laurent