web-dev-qa-db-fra.com

Comment savoir où alias (au sens bash) est défini lors de l'exécution de Terminal sous Mac OS X

Comment savoir où un alias est défini sur mon système? Je fais référence au type d'alias utilisé dans une session Terminal ouverte à partir de Mac OS X (10.6.3).

Par exemple, si je saisis la commande alias sans paramètres à l'invite de commande de terminal, je reçois une liste d'alias que j'ai définis, par exemple:

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

Cependant, j'ai effectué des recherches sur l'ensemble de mon système à l'aide de Spotlight et de mdfind dans divers fichiers de démarrage, mais je ne peux pas trouver où cet alias a été défini. (Je l'ai fait il y a longtemps et je n'ai pas noté où j'avais attribué l'alias).

44
Richard Fuhr

Pour OSX, cette séquence en deux étapes a bien fonctionné pour moi, car elle a permis de localiser un alias que j'avais créé il y a longtemps et que je ne pouvais pas localiser à l'emplacement prévu (~/.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! "Cacher" dans ~/.oh-my-zsh/lib/aliases.zsh. J'avais fouillé un peu dans .oh-my-zsh mais j'avais négligé lib/aliases.zsh.

36
cweekly

vous pouvez simplement taper alias sur la commande Invite pour voir quels alias vous avez. Sinon, vous pouvez faire une find sur les endroits les plus communs où les alias sont définis, par exemple

grep -RHi "alias" /etc /root
26
ghostdog74

Aussi à l'avenir ce sont les fichiers de configuration bash standard

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

Plus d'infos: http://www.heimhardt.com/htdocs/bashrcs.html

14
sixtyfootersdude

Un peu tard pour le parti, mais je rencontrais le même problème (essayer de trouver où la commande "l." Était aliasée dans RHEL6) et aboutissait dans un endroit non mentionné dans les réponses précédentes. Il ne se trouve peut-être pas dans toutes les implémentations de bash, mais si le répertoire /etc/profile.d/ existe, essayez de rechercher des alias inexpliqués ici. C'est là que j'ai trouvé:

[user@server ~]$ 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

Le répertoire n'est pas mentionné dans la page de manuel bash et ne fait pas vraiment partie des endroits où bash recherche les informations de profil/démarrage, mais dans le cas de RHEL, vous pouvez voir le code d'appel dans/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
6
Stovey

Pour des configurations plus complexes (par exemple, lorsque vous utilisez un framework de script Shell comme bash-it, oh-my-zsh ou autres), il est souvent utile d’ajouter «alias mysql» à des emplacements clés dans vos scripts. Cela vous aidera à savoir exactement quand l’alias est ajouté.

par exemple.:

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

J'ai trouvé la réponse (j'avais regardé le bon fichier mais j'avais manqué l'évidence).

Les alias dans mon cas sont définis dans le fichier ~/.bash_profile

D'une certaine manière, cela m'a échappé.

1
Richard Fuhr

Je pense que cela ressemble peut-être à ce que ghostdog74 voulait dire, mais leur commandement ne fonctionnait pas pour moi. 

Je voudrais essayer quelque chose comme ça: 

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

Si vous voulez être vraiment chic, vous pouvez même ajouter un if [[ grep -c "alias" ]] then <print file name>

0
sixtyfootersdude