Wie wird der Befehl angezeigt, der an einen Bash-Alias ​​angehängt ist?


324

Angenommen, ich habe einen Alias ​​in der Bash-Shell. Gibt es einen einfachen Befehl zum Ausdrucken des Befehls, den der Alias ​​ausführen soll?

Antworten:


431

Das typeeingebaute ist dafür nützlich. Hier erfahren Sie nicht nur mehr über Aliase, sondern auch über Funktionen, integrierte Schlüsselwörter und externe Befehle.

$ 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 cmdZeigt alle Befehle mit diesem Namen in der Rangfolge an, was für den lsobigen Alias nützlich ist , den der Alias ​​selbst aufruft ls.

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

Dies sagt Ihnen , dass , wenn Sie laufen ls, /bin/lsverwendet werden, und --color=autowird in der Liste der Argumente, zusätzlich zu jedem anderen Sie selbst hinzufügen enthalten sein.


Was tun, wenn ein Alias ​​WEITERE Aliase enthält?
user251046

2
@ user251046 weiterhin verwenden, typebis Sie etwas anderes als ein Alias
treffen

Diese Antwort gefällt mir, weil typeAnführungszeichen analysiert / interpretiert werden, damit Sie sicherstellen können, dass die Anführungszeichen richtig sind.
wisbucky

Ich habe ls is aliased to 'ls --color=auto', aber wie kann ich eine Ebene tiefer gehen, um zu sehen, ob / bin / ls oder / usr / local / bin / ls verwendet wird oder was?
Krubo

1
@krubo type -a lszeigt alle gefundenen ls-Befehle in der Reihenfolge ihrer Präferenz an. Was sich direkt unter dem Alias ​​befindet, wird vom Alias ​​ausgeführt.
Geirha

163

Geben Sie einfach aliasan der Shell-Eingabeaufforderung ein. Es sollte eine Liste aller derzeit aktiven Aliase ausgegeben werden.

Sie können auch alias [command]eingeben, um zu sehen, auf welchen Alias ​​ein bestimmter Alias ​​angewendet wird. Wenn Sie beispielsweise herausfinden lsmöchten, auf welche Weise der Alias ​​angewendet wurde, können Sie dies tun alias ls.


12
Oder geben Sie ein alias ls, um herauszufinden, worauf genau lsabgestellt ist.
Poolie

2
@poolie In der Tat. Ich denke, die Frage war, alle Aliase zu sehen, weshalb ich nicht weiter auf den Aliasbefehl eingegangen bin .
Thomas Ward

Dies funktioniert zwar für Aliase, jedoch nicht, wenn Sie eine benutzerdefinierte Shell-Funktion definiert haben. typeFunktioniert jedoch in beiden Fällen.
Sujay Phadke

53

Ich mag wirklich Ctrl+ Alt+ , Ewie ich aus gelernt dieser Antwort . Es "erweitert" die aktuell eingegebene Befehlszeile, dh es führt (unter anderem) eine Alias-Erweiterung durch.

Was bedeutet das? Es verwandelt jeden Alias, der aktuell in der Befehlszeile geschrieben ist, in das, wofür der Alias ​​steht.

Zum Beispiel, wenn ich tippe:

$ ls

und dann Ctrl+ Alt+ drücken E, wird es in gedreht

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

hat dies ein äquivalent zu anderen distros?
Sepehr

@sepehr Funktioniert unter Debian, ich gehe davon aus, dass es sich um eine Bash-Funktion handelt, die auf jeder Distribution funktionieren sollte.
Der Hochstapler

4
du hast recht, es funktioniert mit bash, aber ich habe zsh und es funktioniert leider nicht.
Sepehr

war sehr hilfreich. Ich hatte ein anderes Ziel, einen der vorherigen Bash-Befehle zu erweitern, die im Verlauf mit "! 394" angemeldet waren, sodass ich ihn vor der Ausführung zuerst bearbeiten konnte
XXL

1
Es hat eine Einschränkung. Wenn ein Alias ​​die erforderlichen Anführungszeichen enthält, werden diese entfernt. Also, ich bekomme squeue -u davidmh -o %.18i %.9P %.25j %.8u %.8T %.10M %.9l %.6D %R stattsqueue -u davidmh -o "%.18i %.9P %.25j %.8u %.8T %.10M %.9l %.6D %R "
Davidmh

10

Genau genommen verwendet die richtige Antwort das Array BASH_ALIASES, z.

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

2
Ich fand dies in einer Situation nützlich, in der ich einen programmatischen Zugriff auf die eigentliche Anweisung ohne die für den Menschen nützlichen Informationen haben wollte.
M. Justin

Dies funktioniert nicht in zsh
ProGrammar

1
@ProGrammar die Frage betraf Bash - für zsh sollten Sie Fragen zu zsh
noonex 18.04.18

1
Bingo. Genau das, was ich brauchte, genauso wie @M.Justin - ich möchte mehr Switches auf den aktuellen lsAlias stapeln, ohne zu ändern, was da ist. Also gehe ich alias ls="${BASH_ALIASES[ls]} --time-style=iso"für meinen Fall.
Rich

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.