Se você não deseja que o cdstick permaneça após a substituição do alias, use um subshell com (y ):
alias my_x="(cd /home/path_to_x && ./x)&"
você pode conferir com
alias test_y="(cd /tmp && sleep 10 ) & "
Observe que a solução
alias my_y="/home/path_to_x/x"
não é exatamente equivalente. Na verdade, se chamado via my_x, o xprograma é executado com um diretório atual /home/path_to_x/, enquanto que, se chamado por my_y, xé executado com um diretório atual que é aquela em que o comando my_yfoi emitido. Isso pode ser importante ou não, dependendo do que xestá sendo feito.
Sobre a solução OP , ela trabalha em 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
mas não em 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 o bash e o zsh executam listas de maneiras diferentes ... por isso é melhor adicionar parênteses explícitos ... obrigado @EliahKagan por apontar para mim.
alias x='/home/path_to_x/x'. Não use.antes/home..(ponto) refere-se ao diretório atual.