Si no desea cdque se pegue después de la sustitución de alias, use una subshell con (y ):
alias my_x="(cd /home/path_to_x && ./x)&"
puedes consultarlo con
alias test_y="(cd /tmp && sleep 10 ) & "
Tenga en cuenta que la solución
alias my_y="/home/path_to_x/x"
No es exactamente equivalente. De hecho, si se llama a través de my_x, el xprograma se ejecuta con un directorio actual /home/path_to_x/, mientras que si se llama por my_y, xse ejecuta con un directorio actual que es donde my_yse emitió el comando . Esto puede ser importante o no, dependiendo de lo que xesté haciendo.
Sobre la solución OP , funciona en 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
pero no en 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] %
Parece que bash y zsh ejecutan listas de diferentes maneras ... así que es mejor agregar el paréntesis explícito ... gracias @EliahKagan por señalarme.
alias x='/home/path_to_x/x'. No lo uses.antes/home..(punto) se refiere al directorio actual.