A última linha da minha .bash_profile
é:
alias cp=/usr/local/bin/gcp
No entanto, isso está sendo esmagado pela entrada em meu $PATH
:
$which cp
/bin/cp
11:54:32/OCspark $type cp
cp is aliased to `/usr/local/bin/gcp'
Eu pensei que os aliases substituem o PATH
.. ?
Responder1
O which
comando retorna apenas executáveis: ele não sabe nada sobre aliases, pois é um programa externo e não há mecanismo para passar informações de alias para um processo filho.
Se você inserir o comando type -a cp
verá todas as interpretações possíveis, em ordem de preferência. Isso inclui qualquer alias, pois type
é um bash
comando interno.
É importante perceber que um alias não será interpretado por um subprocesso, como um script ou um editor interativo que tenha a opção de executar comandos do sistema.
Se você criar cp
uma função, sua versão será executada em scripts, embora não em outros programas:
cp() { /usr/local/bin/gcp "$@"; }
Se você quiser cp
que funcione em qualquer lugar, adicione $HOME/bin
no início da sua PATH
lista e ponto $HOME/bin/cp
a ponto:
ln -s /usr/local/bin/gcp $HOME/bin/cp
Isso cria um link simbólico, embora você possa torná-lo um link físico um pouco mais eficiente (omitir -s
), mas normalmente precisará de permissões de root ( sudo ln ...
). A criação de uma função e a adição à PATH
variável serão feitas em um dos bash
scripts de inicialização, com permissões do usuário.
Responder2
Os aliases são internos ao shell. Outros programas não saberão sobre eles.
which
não é um recurso interno do Bash (é um recurso interno de alguns outros shells, por exemplo, zsh). Como which
não há informações privilegiadas sobre os aliases do Bash, which
apenas procura PATH
o termo fornecido.
type
, por outro ladoéum Bash integrado, para que possa relatar aliases.