O alias não "substitui" as entradas PATH?

O alias não "substitui" as entradas PATH?

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 whichcomando 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 cpverá todas as interpretações possíveis, em ordem de preferência. Isso inclui qualquer alias, pois typeé um bashcomando 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 cpuma função, sua versão será executada em scripts, embora não em outros programas:

cp() { /usr/local/bin/gcp "$@"; }

Se você quiser cpque funcione em qualquer lugar, adicione $HOME/binno início da sua PATHlista e ponto $HOME/bin/cpa 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 à PATHvariável serão feitas em um dos bashscripts 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.

whichnão é um recurso interno do Bash (é um recurso interno de alguns outros shells, por exemplo, zsh). Como whichnão há informações privilegiadas sobre os aliases do Bash, whichapenas procura PATHo termo fornecido.

type, por outro ladoéum Bash integrado, para que possa relatar aliases.

informação relacionada