Nếu bạn không muốn cd
dí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
, x
chươ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.