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.