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?

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.


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.


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

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

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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.