Wie kann ich herausfinden, wo auf meinem System ein Alias definiert ist? Ich beziehe mich auf die Art von Alias, die in einer Terminalsitzung verwendet wird, die von Mac OS X (10.6.3) aus gestartet wird.
Wenn ich beispielsweise den Befehl alias
ohne Parameter an einer Eingabeaufforderung des Terminalbefehls eingebe, erhalte ich eine Liste mit Aliasnamen, die ich festgelegt habe, zum Beispiel
alias mysql='/usr/local/mysql/bin/mysql'
Ich habe jedoch mit Spotlight und mdfind
in verschiedenen Startdateien auf meinem gesamten System gesucht und kann bisher nicht finden, wo dieser Alias definiert wurde. (Ich habe es vor langer Zeit getan und habe nicht niedergeschrieben, wo ich den Alias vergeben habe).
Für OSX hat diese 2-Schritt-Sequenz für mich gut funktioniert, bei der Suche nach einem Alias, den ich vor langer Zeit erstellt hatte und nicht an der erwarteten Stelle (~/.zshrc) finden konnte.
cweekly:~ $ which la
la: aliased to ls -lAh
cweekly:~$ grep -r ' ls -lAh' ~
/Users/cweekly//.oh-my-zsh/lib/aliases.zsh:alias la='ls -lAh'
Aha! "Verstecken" in ~/.oh-my-zsh/lib/aliases.zsh
. Ich war ein bisschen in .oh-my-zsh herumgestochert, hatte aber lib/aliases.zsh übersehen.
sie können einfach alias
an der Eingabeaufforderung eingeben, um zu sehen, welche Aliase Sie haben. Ansonsten können Sie eine find
an den häufigsten Stellen ausführen, an denen Aliasnamen definiert sind, z
grep -RHi "alias" /etc /root
Dies sind auch in Zukunft die Standard-bash-Konfigurationsdateien
Weitere Informationen: http://www.heimhardt.com/htdocs/bashrcs.html
Ein bisschen zu spät zur Party, aber ich hatte das gleiche Problem (versuchte herauszufinden, wo der Befehl "l." In RHEL6 einen Alias hatte) und endete an einem Ort, der nicht in den vorherigen Antworten erwähnt wurde. Es wird möglicherweise nicht in allen Bash-Implementierungen gefunden. Wenn jedoch das Verzeichnis /etc/profile.d/ vorhanden ist, versuchen Sie, dort nach unerklärten Aliasnamen zu suchen. Dort habe ich gefunden:
[[email protected] ~]$ grep l\\. /etc/profile.d/*
/etc/profile.d/colorls.csh:alias l. 'ls -d .*'
/etc/profile.d/colorls.csh:alias l. 'ls -d .* --color=auto'
/etc/profile.d/colorls.sh: alias l.='ls -d .*' 2>/dev/null
/etc/profile.d/colorls.sh:alias l.='ls -d .* --color=auto' 2>/dev/null
Das Verzeichnis wird in der bash-Manpage nicht erwähnt und ist nicht korrekt darin, wo bash nach Profil-/Startup-Informationen sucht. Im Fall von RHEL können Sie jedoch den Aufrufcode in/etc/profile sehen:
for i in /etc/profile.d/*.sh ; do
if [ -r "$i" ]; then
if [ "${-#*i}" != "$-" ]; then
. "$i"
else
. "$i" >/dev/null 2>&1
fi
fi
done
Für komplexere Setups (z. B. wenn Sie ein Shell-Skript-Framework wie bash-it, oh-my-zsh oder dergleichen verwenden), ist es häufig nützlich, an den Schlüsselpositionen in Ihren Skripten "Alias mysql" hinzuzufügen. Dies hilft Ihnen, herauszufinden, wann der Alias hinzugefügt wird.
z.B.:
echo "before sourcing .bash-it:"
alias mysql
. $HOME/.bash-it/bash-it.sh
echo "after sourcing bash:"
alias mysql
Ich fand die Antwort (ich hatte die richtige Datei angestarrt, aber das Offensichtliche übersehen).
Die Aliase in meinem Fall sind in der Datei ~/.bash_profile definiert
Irgendwie entging mir das nicht.
Ich denke, das ist vielleicht ähnlich wie ghostdog74 , aber ihr Befehl hat für mich nicht funktioniert.
Ich würde so etwas versuchen:
for i in `find . -type f`; do # find all files in/under current dir
echo "========"
echo $i # print file name
cat $i | grep "alias" # find if it has alias and if it does print the line containing it
done
Wenn Sie wirklich ausgefallen sein möchten, können Sie sogar einen if [[ grep -c "alias" ]] then <print file name>
hinzufügen.