Odpowiadając na to pytanie odkryłem bardzo zabawne (i subtelne) różnicę między zachowaniem się bash
i zsh
:
W 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
Jak widać, wykonanie aliasu x
odbywa się w podpowłoce, więc bieżący katalog się nie zmienia.
Nie w 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] %
tutaj katalog się zmienia.
Wygląda na to, że &
in bash
ma inny priorytet niż w zsh
--- Mam na myśli, że polecenie wydaje się czytane jako
(cd /tmp && echo A) &
w bash
i jako
cd /tmp && (echo A &)
w zsh
. Czy to jest prawidłowe, czy przyczyną innego zachowania jest inne?