Ein Alias, wie er ll
mit dem alias
Befehl definiert wird .
Ich kann den Befehl mit Dingen wie type ll
dem Ausdrucken überprüfen
ll is aliased to `ls -l --color=auto'
oder command -v ll
welche druckt
alias ll='ls -l --color=auto'
oder alias ll
was auch druckt
alias ll='ls -l --color=auto'
aber ich kann scheinbar nicht finden, wo der Alias definiert wurde, dh eine Datei wie .bashrc
oder vielleicht manuell in der laufenden Shell. An dieser Stelle bin ich mir nicht sicher, ob dies überhaupt möglich ist.
Sollte ich einfach alle Dateien durchgehen, die von geladen wurden, bash
und jede einzelne davon überprüfen?
bash -xl
Antworten:
Manuelle Definitionen sind schwer zu erkennen (vielleicht die Verlaufsprotokolle), obwohl die Shell gefragt wird, was sie tut
grep
, um die in einer RC-Datei gesetzten zu finden:Wenn die Shell die erforderlichen Optionen mit einem der oben genannten Aufrufe (die den Befehl null interaktiv ausführen) nicht genau erfasst, gilt Folgendes
script
:Eine andere Möglichkeit wäre, etwas wie
strace
odersysdig
zu verwenden, um alle Dateien zu finden, die die Shell berührt, und diese danngrep
manuell zu öffnen (praktisch, wenn die Shell oder das Programm kein-x
Flag haben). Die Standard-RC-Dateien reichen nicht für eine manuelle Überprüfung der Dateinamen aus, wenn so etwas wie oh-my-zsh oder standortspezifische Konfigurationen Code von who know where einlesen (oder auch Umgebungsvariablen, wie sorontar in ihrer Antwort hervorhebt). .quelle
PS4='+The ll alias is "${BASH_ALIASES["ll"]}" ' bash -ixlc :
Hier finde ich
grep -rl
sehr nützlich:wird Ihnen sagen, in welcher Datei das Wort
alias
verwendet wird.Wahrscheinlich in
~/.bashrc
und mit Sicherheit in,~/.bash_aliases
wenn es existiert.Es ist jedoch unmöglich, absolut sicher zu sein, dass dies alle Optionen abdeckt. Diese Dateien können auch andere Dateien aufrufen oder laden. Eine Umgebungsvariable wie ENV oder
$BASH_ENV
kann bash anweisen, einige andere Dateien zu laden.Und Aliase können sogar durch Setzen einer Variablen definiert werden (Hervorhebung meiner):
quelle
grep -rl alias ~/.bash*
stimmt möglicherweise fälschlicherweise mit Verlaufsdateien überein, aber +1, um auf das Array BASH_ALIASES hinzuweisen!Ich kenne keine Möglichkeit, die Quelle Ihrer Aliase tatsächlich aufzulisten, aber da es so aussieht, als würden Sie bash verwenden, denke ich, dass dies die möglichen Quelldateien sind:
Sie sollten in der Lage sein, diese zu durchsuchen, um den Alias zu finden, z
grep 'ls -l --color=auto' /etc/profile ~/.profile /etc/bash.bashrc ~/.bash_profile ~/.bashrc
.quelle
bash -x
. Ich dachte, dass das oben Genannte einfach genug ist, um schnell zu laufen, und wenn es den Alias nicht findet, können Sie die Ausführungsschritte durchlesen.Wenn Sie die Antwort von thrig mit dem Vorschlag von @ MarkPlotnick kombinieren , können Sie testen, ob diese Option aktiviert ist, um sie einzugrenzen
BASH_ALIASES[ll]
. DasBASH_SOURCE
Array und dieLINENO
Variablen sind hier besonders nützlich. Leider wird die Überprüfung, ob gesetztBASH_ALIASES[ll]
ist, erst erfolgreich sein, nachdem der Alias gesetzt wurde, und so könnte sich die erste solche Zeile in einer anderen Datei befinden.Ausgabe geben wie:
Sie können die Shell sogar mit dieser Prüfung beenden:
quelle
Ich hatte Erfolg einfach mit
which
.quelle
which
Kann Aliase in tcsh (und vielleicht in früheren csh) und zsh verarbeiten, wo es ein eingebautes ist, und in bash mit dem Standardprofil der RedHat-Familie, das einen Klumpen hat, um das (externe) GNU-Programm auszuführen, aber es mit Shell-Aliasdaten zu versorgen, andernfalls nicht . Wichtiger ist, dass nur angegeben wird, auf was der Alias festgelegt ist, nicht, wo er festgelegt wurde, was hier das Q war.Überprüfen Sie ~ / .profile, wenn es sich nicht in ~ / .bashrc befindet
quelle
Endlich habe ich die
ll
Alias-Definition für unseren Webserver (CentOS) in zwei Shell-Skripten gefunden/etc/profile.d/
:/etc/profile.d/colorls.csh
/etc/profile.d/colorls.sh
Ich fand es , indem man zuerst das Lernen aus den Kommentaren oben , wo das systemweite Profil war:
/etc/profile
. Diese Datei gibt an, dass systemweite Aliase in definiert sind/etc/bashrc
, und in dieser Datei habe ich gesehen, dass sie mehrere Shell-Skripte durchläuft. Also/etc/profile.d/
habe ich siegrep
in diesem Verzeichnis verwendet und schließlich die Definitionen gefunden. Ich habe auch festgestellt, dass es einenl.
Alias gibt, der alle Punktedateien auflistet:Von
colorls.sh
:(Es gibt äquivalente Aliase in
colorls.csh
.)quelle
Verwenden Sie zuerst die folgenden Befehle
Alle Funktionen auflisten
Alle Aliase auflisten
Wenn Sie den Alias oder die Funktion nicht finden, ziehen Sie eine aggressivere Suchmethode in Betracht
Bash-Version
Zsh-Version
Kurze Erläuterung der Optionen
quelle