Если вы не хотите, cdчтобы после замены псевдонима вставлялось, используйте подоболочку с (y ):
alias my_x="(cd /home/path_to_x && ./x)&"
Вы можете проверить это с
alias test_y="(cd /tmp && sleep 10 ) & "
Обратите внимание, что решение
alias my_y="/home/path_to_x/x"
не совсем эквивалентно. В самом деле, если вызывается через my_x, то xпрограмма запускается с текущим каталогом /home/path_to_x/, в то время как если вызывается my_y, xвыполняется с текущим каталогом , который является тот , в котором команда my_yбыла выдана. Это может быть важно или нет в зависимости от того, что xделает.
Что касается решения OP , оно работает в 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
но не в 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] %
Кажется, что bash и zsh выполняют списки по-разному ... так что лучше добавить явные скобки ... спасибо @EliahKagan за указание его мне.
alias x='/home/path_to_x/x'. Не используйте.раньше/home..(точка) относится к текущему каталогу.