Come vedere il comando allegato a un alias bash?


324

Supponiamo che io abbia un alias nella shell bash. Esiste un semplice comando per stampare quale comando verrà eseguito l'alias?

Risposte:


431

Il typebuiltin è utile per questo. Non ti parlerà solo di alias, ma anche di funzioni, built-in, parole chiave e comandi esterni.

$ 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 cmdmostrerà tutti i comandi con quel nome in ordine di precedenza, che è utile per l' lsalias sopra, dove lo stesso alias chiama ls.

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

Questo ti dice che quando eseguirai ls, /bin/lsverrà utilizzato e --color=autoverrà incluso nel suo elenco di argomenti, oltre a qualsiasi altro che ti aggiungi.


cosa fare quando un alias contiene PIÙ alias?
user251046

2
@ user251046 continua a usare typefino a quando non colpisci qualcosa di diverso da un alias ...
geirha,

Mi piace questa risposta perché typeanalizzerà / interpreterà le virgolette, quindi puoi assicurarti che le virgolette siano giuste.
Wisbucky

Ho capito ls is aliased to 'ls --color=auto', ma come posso approfondire uno strato, per vedere se usa / bin / ls o / usr / local / bin / ls o cosa?
Krubo,

1
@krubo type -a lsmostrerà tutti i comandi ls trovati in ordine di preferenza. Qualunque sia proprio sotto l'alias è quello che verrà eseguito dall'alias.
geirha,

163

Basta digitare aliasal prompt di Shell. Dovrebbe essere visualizzato un elenco di tutti gli alias attualmente attivi.

In alternativa, è possibile digitare alias [command]per vedere a cosa viene aliasato uno specifico alias, ad esempio, se si desidera scoprire a cosa lsera aliasato l' alias, è possibile farlo alias ls.


12
Oppure digita alias lsper scoprire a cosa lsè specificamente destinato.
poolie

2
@poolie Infatti. Penso che la domanda fosse vedere tutti gli alias, tuttavia, ecco perché non ho approfondito ulteriormente il comando alias.
Thomas Ward

mentre questo funziona per gli alias, non funziona se hai definito una funzione di shell personalizzata. typetuttavia, funziona in entrambi i casi.
Sujay Phadke,

53

Mi piace molto Ctrl+ Alt+ Ecome ho imparato da questa risposta . "Espande" la riga di comando attualmente digitata, nel senso che esegue l'espansione dell'alias (tra le altre cose).

Cosa significa? Trasforma qualsiasi alias, che potrebbe essere attualmente scritto sulla riga di comando, in ciò che l'alias rappresenta.

Ad esempio, se digito:

$ ls

e quindi premi Ctrl+ Alt+ E, si trasforma in

$ ls --time-style=locale --color=auto

hai un equivalente su altre distro?
sepehr,

@sepehr Funziona su Debian, suppongo sia una funzione bash e dovrebbe funzionare su qualsiasi distribuzione.
Der Hochstapler,

4
hai ragione, funziona su bash ma ho zsh e purtroppo non funziona.
sepehr

è stato davvero utile. Avevo un obiettivo diverso di espandere uno dei precedenti comandi bash registrati nella cronologia con, ad esempio,! 394, in modo da poterlo modificare prima di eseguire
XXL

1
Ha un avvertimento. Quando un alias include le virgolette necessarie, verranno rimosse. Quindi, squeue -u davidmh -o %.18i %.9P %.25j %.8u %.8T %.10M %.9l %.6D %R invece disqueue -u davidmh -o "%.18i %.9P %.25j %.8u %.8T %.10M %.9l %.6D %R "
Davidmh

10

A rigor di termini, la risposta corretta sta usando l'array BASH_ALIASES, ad esempio:

$ echo ${BASH_ALIASES[ls]}
ls -F --color=auto --show-control-chars

2
L'ho trovato utile in una situazione in cui volevo che l'accesso programmatico all'affermazione effettiva fosse aliasato senza le cose umane utili intorno ad esso.
M. Justin,

questo non funziona in zsh
ProGrammar

1
@ProGrammar la domanda era su bash - per zsh dovresti cercare domande su zsh
noonex

1
Bingo. Esattamente quello di cui avevo bisogno, lo stesso di @ M.Justin - Voglio impilare più switch sull'alias corrente lssenza alterare quello che c'è. Quindi vado alias ls="${BASH_ALIASES[ls]} --time-style=iso"per il mio caso.
Ricco

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.