Отвечая на этот вопрос, я обнаружил очень забавную (и тонкую) разницу между поведением в bashи zsh:
В 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
Как видите, выполнение псевдонима xвыполняется в подоболочке, поэтому текущий каталог не изменяется.
Не в 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] %
здесь каталог изменен.
Кажется, что у &in bashприоритет другой, чем у zsh--- Я имею в виду, что команда читается как
(cd /tmp && echo A) &
в bashи как
cd /tmp && (echo A &)
в zsh. Это правильно или причина другого поведения - другая?