Nếu bạn không muốn cddính sau khi thay thế bí danh, hãy sử dụng một nhánh con với (y ):
alias my_x="(cd /home/path_to_x && ./x)&"
bạn có thể kiểm tra nó với
alias test_y="(cd /tmp && sleep 10 ) & "
Lưu ý rằng giải pháp
alias my_y="/home/path_to_x/x"
không chính xác tương đương. Trong thực tế, nếu được gọi qua my_x, xchương trình được chạy với một thư mục hiện tại /home/path_to_x/, trong khi nếu được gọi bởi my_y, thì xđược chạy với một thư mục hiện tại là thư mục my_yđược phát lệnh. Điều này có thể quan trọng hay không phụ thuộc vào những gì xđang làm.
Về giải pháp OP , nó hoạt động 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ưng không ở 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] %
Có vẻ như bash và zsh thực thi danh sách theo các cách khác nhau ... vì vậy tốt hơn là thêm dấu ngoặc đơn rõ ràng ... cảm ơn @EliahKagan đã chỉ cho tôi.
alias x='/home/path_to_x/x'. Đừng sử dụng.trước/home..(dấu chấm) đề cập đến thư mục hiện tại.