Wenn Sie nicht möchten, dass das cd
nach der Alias-Ersetzung bleibt, verwenden Sie eine Unterschale mit (
y )
:
alias my_x="(cd /home/path_to_x && ./x)&"
Sie können es mit überprüfen
alias test_y="(cd /tmp && sleep 10 ) & "
Beachten Sie, dass die Lösung
alias my_y="/home/path_to_x/x"
ist nicht genau gleichwertig. Wenn my_x
das x
Programm über aufgerufen wird , wird es mit einem aktuellen Verzeichnis ausgeführt /home/path_to_x/
. Wenn es von aufgerufen wird my_y
, x
wird es mit einem aktuellen Verzeichnis ausgeführt, in dem der Befehl my_y
ausgegeben wurde. Dies kann wichtig sein oder nicht, je nachdem, was x
gerade getan wird.
Über die OP-Lösung funktioniert es in 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
aber nicht in 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] %
Es scheint, dass bash und zsh Listen auf unterschiedliche Weise ausführen ... daher ist es besser, die explizite Klammer hinzuzufügen ... danke @EliahKagan, dass Sie darauf hingewiesen haben.
alias x='/home/path_to_x/x'
. Nicht.
vorher verwenden/home
..
(Punkt) bezieht sich auf das aktuelle Verzeichnis.