A última linha do meu .bash_profile
é:
alias cp=/usr/local/bin/gcp
No entanto, isso está sendo esmagado pela entrada no meu $PATH
:
$which cp
/bin/cp
11:54:32/OCspark $type cp
cp is aliased to `/usr/local/bin/gcp'
Eu tinha pensado que aliases substituem o PATH
..?
bash
alias
bash-alias
javadba
fonte
fonte
PATH
envar.Respostas:
O
which
comando retorna apenas executáveis: 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ê digitar o comando
type -a cp
, verá todas as interpretações possíveis, em ordem de preferência. Isso inclui qualquer alias, já quetype
é umbash
comando interno.É importante perceber que um alias não será interpretado por um subprocesso, como um script ou um editor interativo que tenha uma opção para executar comandos do sistema.
Se você criar
cp
uma função, sua versão será executada em scripts, embora não de outros programas:Se você deseja que você
cp
trabalhe em qualquer lugar, adicione$HOME/bin
no início da suaPATH
lista e$HOME/bin/cp
aponte para ela:Isso cria um link simbólico, embora você possa torná-lo um link físico um pouco mais eficiente (omitir
-s
), mas isso 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 dosbash
scripts de inicialização, com permissões de usuário.fonte
which
que seja executado/usr/bin/which
com a entrada canalizada a partir da saída dealias
e uma opção que diga para ler essa entrada e use-a para mostrar um alias se corresponder ao comando. Veja unix.stackexchange.com/questions/10525/…which
paratype
. Em seguida,which -a
opera como o programa externo, com a adição do alias e das definições de função. Geralmente nãoalias which=type
, porque gosto de usar$(which ProgName)
quando quero forçar o uso de um programa externo, ignorando qualquer alias ou definição de função.ln
sugestão não simbólica funcionará apenas se o diretório inicial estiver no mesmo sistema de arquivos/usr/local/bin
. Ele também se comportará de maneira estranha se você atualizargcp
, pois seu link físico provavelmente ainda se refere à versão antiga.gcp
, dependerá se a atualização é feita abrindo e gravando ou excluindo e recriando. Observe que não é relevante se um caminho de origem absoluto ou relativo é usado para criar um link físico, enquanto um link simbólico geralmente precisa de um caminho absoluto. Os links são usados extensivamente no sistema operacional e são principalmente simbólicos.Os aliases são internos ao shell. Outros programas não saberão sobre eles.
which
não é um built-in do Bash (é um componente de alguns outros shells, por exemplo, zsh). Comowhich
não tem informações privilegiadas nos aliases de Bash,which
apenas analisaPATH
o termo fornecido.type
, por outro lado, é um Bash embutido, para que possa relatar aliases.fonte