Como ver o comando anexado a um alias do bash?

324

Suponha que eu tenha um alias no shell bash. Existe um comando simples para imprimir qual comando o alias será executado?

Casebash
fonte

Respostas:

431

O typebuiltin é útil para isso. Ele não apenas informa sobre aliases, mas também funções, funções internas, palavras-chave e comandos externos.

$ type ls
ls is aliased to `ls --color=auto'
$ type rm
rm is /bin/rm
$ type cd
cd is a shell builtin
$ type psgrep
psgrep is a function
psgrep () 
{ 
    ps -ef | { 
        read -r;
        printf '%s\n' "$REPLY";
        grep --color=auto "$@"
    }
}

type -a cmdmostrará todos os comandos com esse nome em ordem de precedência, o que é útil para o lsalias acima, onde o próprio alias chama ls.

$ type -a ls
ls is aliased to `ls --color=auto'
ls is /bin/ls

Isso informa que, quando você executar ls, /bin/lsserá usado e --color=autoserá incluído em sua lista de argumentos, além de qualquer outro que você adicionar.

Geirha
fonte
o que fazer quando um alias contém MAIS aliases?
user251046
2
@ user251046 continuar usando typeaté atingir algo diferente de um alias ...
geirha
Gosto desta resposta porque typeanalisará / interpretará todas as aspas, para que você possa ter certeza de que as aspas estão corretas.
wisbucky
Entendi ls is aliased to 'ls --color=auto', mas como posso aprofundar uma camada para ver se ela usa / bin / ls ou / usr / local / bin / ls ou o quê?
krubo 29/01
1
O @krubo type -a lsmostrará todos os comandos ls encontrados em ordem de preferência. O que estiver logo abaixo do alias é aquele que será executado pelo alias.
geirha 30/01
163

Basta digitar aliasenquanto estiver no prompt do Shell. Ele deve gerar uma lista de todos os aliases atualmente ativos.

Ou, você pode digitar alias [command]para ver a que alias específico está o alias, como exemplo, se você quiser descobrir a que o lsalias está alias, poderá fazer alias ls.

Thomas Ward
fonte
12
Ou digite alias lspara descobrir o que especificamente lsestá associado.
poolieby
2
@poolie De fato. Acho que a questão era ver todos os aliases, e é por isso que não desenvolvi mais o comando alias.
Thomas Ward
Embora isso funcione para aliases, não funcionará se você definiu uma função de shell personalizada. typeno entanto, funciona nos dois casos.
Sujay Phadke
53

Eu realmente gosto de Ctrl+ Alt+ Ecomo aprendi com esta resposta . Ele "expande" a linha de comando digitada no momento, o que significa que realiza a expansão do alias (entre outras coisas).

O que isso significa? Ele transforma qualquer alias, que pode estar atualmente escrito na linha de comando, no que o alias representa.

Por exemplo, se eu digitar:

$ ls

e depois pressione Ctrl+ Alt+ E, é transformado em

$ ls --time-style=locale --color=auto
Der Hochstapler
fonte
isso é equivalente em outras distros?
sepehr
@sepehr Funciona no Debian, eu assumo que é um recurso bash e deve funcionar em qualquer distribuição.
Der Hochstapler
4
você está certo, ele funciona no bash, mas eu tenho o zsh e infelizmente não funciona.
sepehr
foi realmente útil. Eu tinha um objetivo diferente de expandir um dos comandos bash anteriores registrados na história com, ou seja, 394, para que eu pudesse editá-lo primeiro antes de executar!
XXL
1
Tem uma ressalva. Quando um alias inclui aspas necessárias, elas serão removidas. Então, eu fico em squeue -u davidmh -o %.18i %.9P %.25j %.8u %.8T %.10M %.9l %.6D %R vez desqueue -u davidmh -o "%.18i %.9P %.25j %.8u %.8T %.10M %.9l %.6D %R "
Davidmh
10

A rigor, a resposta correta é usar a matriz BASH_ALIASES, por exemplo:

$ echo ${BASH_ALIASES[ls]}
ls -F --color=auto --show-control-chars
noonex
fonte
2
Achei isso útil em uma situação em que eu queria que o acesso programático à declaração real fosse aliasado, sem as coisas úteis para o homem ao seu redor.
M. Justin
isso não está funcionando em zsh
ProGrammar
1
@ProGrammar a pergunta foi sobre o bash - para zsh você deve olhar perguntas sobre zsh
noonex
1
Bingo. Exatamente o que eu precisava, assim como @ M.Justin - eu quero empilhar mais opções no lsalias atual sem alterar o que está lá. Então, eu estou indo alias ls="${BASH_ALIASES[ls]} --time-style=iso"para o meu caso.
Rich
2

Você poderia usar o whichcomando

Se você definir um alias para lsas ls -ale digitar which ls, verá:

ls: aliased to ls -al.

user312471
fonte
bash não tem whichcomando.
Geirha #
Não funciona para mim ..
Chiel ten Brinke
2
whiché uma maneira ruim de procurar aliases, conforme explicado aqui: unix.stackexchange.com/questions/10525/… Nem sequer funciona para mim para aliases no bash no Ubuntu.
Sujay Phadke