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 bash
và zsh
:
Trong bash
:
[email protected]:~$ pwd
/home/romano
[email protected]:~$ alias x="cd /bin && ./echo A >/dev/null &"
[email protected]:~$ x
[1] 16611
[email protected]:~$ 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 bash
có 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 bash
và 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?