Se você não deseja que o cd
stick 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 x
programa é 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_y
foi emitido. Isso pode ser importante ou não, dependendo do que x
está 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.