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.