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?

Casebash
quelle

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.

geirha
quelle
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.

Thomas Ward
quelle
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
Der Hochstapler
quelle
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
noonex
quelle
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
2

Sie könnten den whichBefehl verwenden.

Wenn Sie einen Alias ​​für lsas festlegen ls -alund dann Folgendes which lseingeben, wird Folgendes angezeigt:

ls: aliased to ls -al.

user312471
quelle
Bash hat keinen whichBefehl.
Geirha
Nicht für mich arbeiten ..
Chiel ten Brinke
2
whichEs ist eine schlechte Möglichkeit, Aliase zu suchen, wie hier erklärt: unix.stackexchange.com/questions/10525/… Es funktioniert nicht einmal für Aliase in Bash auf Ubuntu.
Sujay Phadke