Trả lời câu hỏi này tôi phát hiện ra một sự khác biệt rất buồn cười (và tinh tế) giữa hành vi trong bashvà zsh:
Trong 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
Như bạn có thể thấy, việc thực hiện bí danh xđược thực hiện trong một lớp con và do đó thư mục hiện tại không thay đổi.
Không có trong 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] %
ở đây thư mục được thay đổi.
Có vẻ như &trong bashcó một ưu tiên khác so với trong zsh--- Ý tôi là, lệnh dường như được đọc là
(cd /tmp && echo A) &
trong bashvà như
cd /tmp && (echo A &)
trong zsh. Điều này đúng hay nguyên nhân của hành vi khác nhau là một hành vi khác?