it-swarm.com.de

Wie Sie herausfinden, wo (unter bash) Alias ​​definiert ist, wenn Sie Terminal unter Mac OS X ausführen

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).

44
Richard Fuhr

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.

36
cweekly

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
26
ghostdog74

Dies sind auch in Zukunft die Standard-bash-Konfigurationsdateien

  • / etc/profile
  • ~/.bash_profile oder ~/.bash_login oder ~/.profile
  • ~/.bash_logout
  • ~/.bashrc

Weitere Informationen: http://www.heimhardt.com/htdocs/bashrcs.html

14

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
6
Stovey

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
1
user1372408

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.

1
Richard Fuhr

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.

0