Bei der Beantwortung dieser Frage entdeckte ich einen sehr lustigen (und subtilen) Unterschied zwischen Verhalten in bash
und zsh
:
In 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
Wie Sie sehen, wird die Ausführung des Alias x
in einer Subshell ausgeführt, sodass sich das aktuelle Verzeichnis nicht ändert.
Nicht in 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] %
Hier wird das Verzeichnis geändert.
Es scheint, dass das &
in bash
eine andere Priorität hat als in zsh
--- Ich meine, der Befehl scheint als gelesen zu werden
(cd /tmp && echo A) &
in bash
und als
cd /tmp && (echo A &)
in zsh
. Ist das richtig oder ist die Ursache für das unterschiedliche Verhalten eine andere?