En répondant à cette question, j'ai découvert une différence très drôle (et subtile) entre le comportement dans bash
et zsh
:
Dans bash
:
romano@RRyS:~$ pwd
/home/romano
romano@RRyS:~$ alias x="cd /bin && ./echo A >/dev/null &"
romano@RRyS:~$ x
[1] 16611
romano@RRyS:~$ pwd
/home/romano
Comme vous pouvez le voir, l'exécution de l'alias x
est effectuée dans un sous-shell et donc le répertoire actuel ne change pas.
Pas dans zsh
:
[romano:~] % pwd
/home/romano
[romano:~] % alias x="cd /bin && ./echo A >/dev/null &"
[romano:~] % x
[1] 16744
[1] + 16744 done ./echo A >/dev/null
1& [romano:/bin] % pwd
/bin
[romano:/bin] %
ici le répertoire est changé.
Il semble que le &
in bash
ait une priorité différente de celle de zsh
--- je veux dire, la commande semble être lue comme
(cd /tmp && echo A) &
dans bash
et comme
cd /tmp && (echo A &)
dans zsh
. Est-ce correct ou la cause du comportement différent en est-elle un autre?