2010-04-10 6 views
34

laufen Wie kann ich herausfinden, wo ein Alias ​​auf meinem System definiert ist? Ich beziehe mich auf die Art von Alias, der innerhalb einer Terminal-Sitzung verwendet wird, die von Mac OS X (10.6.3) gestartet wurde.Wie in der Alias ​​(in dem Bash-Sinne), um herauszufinden, definiert ist, wenn der Terminal in Mac OS X

Zum Beispiel, wenn ich den alias Befehl ohne Parameter an einem Terminal-Eingabeaufforderung eingeben, erhalte ich eine Liste der Aliase, die ich gesetzt haben, zum Beispiel:

alias mysql='/usr/local/mysql/bin/mysql' 

Allerdings habe ich überall gesucht mein System mit Spotlight und mdfind in verschiedenen Startup-Dateien und so weit kann nicht finden, wo dieser Alias ​​definiert wurde. (Ich habe es vor langer Zeit gemacht und habe nicht aufgeschrieben, wo ich das Alias ​​angegeben habe).

+0

Diese Frage ist (jetzt) ​​off-topic für StackOverflow, und es wurde beantwortet [auf Unix & Linux.SE] (https://unix.stackexchange.com/questions/38330/how-can-i-find-a- Rogue-Alias-Deklaration). –

+0

Ich stimme für das Schließen dieser Frage als Off-Topic, weil es zu U & L gehört (https://unix.stackexchange.com/questions/38330/how-can-i-find-a-rogue-alias-declaration) oder Superbenutzer. –

Antwort

1

fand ich die Antwort (ich in der richtigen Datei hatte gestarrt verfehlte aber die offensichtliche).

Die Aliase in meinem Fall sind in der Datei ~/.bash_profile

Irgendwie definiert diese mir entzog.

+0

danke, versuchte .bashrc und .bash_aliases, vergaß es .bash_profile – neaumusic

22

können Sie einfach nur in alias auf der Eingabeaufforderung Sie haben zu sehen, was Aliase. Ansonsten können Sie eine find auf die häufigsten Orte tun, wo Aliase definiert werden, zB

grep -RHi "alias" /etc /root 
0

Ich denke, dass vielleicht ist dies ähnlich dem, was ghostdog74 jedoch bedeutete ihren Befehl nicht für mich arbeiten.

Ich würde so etwas wie dies 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 Lust sein wollte könnte man sogar eine if [[ grep -c "alias" ]] then <print file name>

+3

Sie wurden mit dem "[Useless Use of Cat Award] (http://partmaps.org/era/unix/award.html)" ausgezeichnet. Anstelle von 'cat $ i | grep "alias" 'Sie sollten es als' grep's letztes Argument platzieren. Z.B. 'grep" alias "$ i'. – johankj

+2

Statt loop, backtick, find, echo und cat wird ein einfaches 'grep -R alias 'das tun, was Sie vorschlagen. Der Kern der Frage ist jedoch * wo zu suchen *. – dimo414

12

Auch in Zukunft fügen diese die Standard-Bash-Konfigurationsdateien sind

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

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

+2

'/ etc/bashrc' wird auch betrachtet. –

+1

Auf einigen Rechnern kann '/ etc/bashrc' den Namen'/etc/bash.bashrc' haben. Es ist sowieso auf meiner Debian 7-Maschine. –

+1

Zusätzlich setzen einige Distributionen systemweite Einstellungen in '/ etc/bash /'. –

1

zu komplexeren Einstellungen (z wenn Sie einen Shell-Skript Framework verwenden wie bash-it, oh-my-zsh oder die Gleichen) ist es oft nützlich ist, zu ‚alias mysql‘ an Schlüsselpositionen in Ihren Skripten hinzuzufügen. Dies wird Ihnen helfen herauszufinden, wann genau der Alias ​​hinzugefügt wird.

zB:

echo "before sourcing .bash-it:" 
alias mysql 
. $HOME/.bash-it/bash-it.sh 
echo "after sourcing bash:" 
alias mysql 
6

Ein bisschen spät zur Party, aber ich war das gleiche Problem (versuchen zu finden, wo die „l.“ -Befehl in RHEL6 aliased wurde), und endete in einer besonderen Stelle in den vorherigen Antworten nicht erwähnt. Es wird möglicherweise nicht in allen Bash-Implementierungen gefunden, aber wenn das Verzeichnis /etc/profile.d/ existiert, versuchen Sie es mit Grepping für ungeklärte Aliase.Das ist, wo 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 nicht in der bash manpage erwähnt und ist nicht richtig Teil, wo bash sucht nach Profil/startup info, aber im Fall von RHEL Sie die Berufung sehen Code in/etc/profile:

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 
26

für OSX dieses 2-Schritt-Sequenz arbeitete gut für mich, in einen Alias ​​lokalisieren ich vor langer Zeit geschaffen hatte und nicht in erwarteten Standort ermitteln konnte (~/.zshrc).

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! "Versteckt" in ~/.oh-my-zsh/lib/aliases.zsh. Ich hatte ein wenig in .oh-my-zsh herumgestochert, hatte aber lib/aliases.zsh übersehen.

HTH

+0

Vielen Dank dafür! –

+0

Dies ist rohe Gewalt, aber effektiv und erfordert kein Rätselraten. Scheint wie der einfachste Weg zu gehen. – jcollum

-6

In meinem Fall, ich Oh My Zsh, so dass ich Definition Aliase in ~/.zshrc Datei.

+0

Posted mit mehr Details vor zweieinhalb Jahren. –

+0

Die Frage ist, dass er sich nicht erinnern kann, wo Aliase in Mac OSX definiert sind, auf die ich gestoßen bin, also gebe ich nur den Speicherort (~/.zshrc) an, der für mich funktioniert hat (ich benutze Oh My Zsh). Ich weiß wirklich nicht, was meinst du mit mehr Details. – ryan

+2

Ich meine, eine [bestehende Antwort vom November 2014] (https://stackoverflow.com/questions/2614403/how-to-find-out-where-aliass-in-the-bash-sense-is-defined-when -running-terminal/43245187 # 26742455) sagte schon alles in dieser Antwort und fügte noch mehr hinzu. –