Comment trouver une déclaration de pseudonyme non autorisé?

37

J'essaie de trouver où un spécifique aliasa été déclaré. J'ai cherché tous les endroits habituels que je connais pour chercher des pseudonymes:

  • ~ / .bashrc
  • ~ / .bash_profile
  • / etc / bashrc
  • / etc / profile

Sans chance.

Je sais que c'est aliasparce que quand je le fais which COMMAND, je reçois:

alias COMMAND='/path/to/command'
    /path/to/command

Y at-il un moyen de trouver quel fichier déclare un aliasseul sachant le aliasnom?

utopique
la source
3
Une question connexe sur les variables d'environnement plutôt que sur les alias. Fondamentalement, il n’existe aucun moyen simple puisque le pseudonyme aurait pu être défini n'importe où. Essayez de mettre set -xcomme suggéré en haut de votre et voir si cela le réduit pour vous.
jw013
1
Vous devriez mettre set -xau sommet de /etc/bash_profileou /etc/bashrc. Pourquoi ne pas simplement courir bash -i -xou bash -l -x?
Mikel

Réponses:

30

Je chercherais /etc/profile.d/la faute alias.

Vous pouvez également faire ce qui suit pour le trouver:

grep -r '^alias COMMAND' /etc

Cela récursivement à greptravers les fichiers recherchant une ligne commençant par alias COMMAND.

Si tout échoue, mettez ceci à la fin de votre ~/.bashrc

unalias COMMAND
utopique
la source
26

Il y a quelques choses que vous pouvez essayer:

  1. utiliser bash -vpour voir quelles lignes sont lues au démarrage du shell
  2. utiliser bash -xpour voir quelles commandes sont en cours d'exécution au démarrage du shell
  3. exécuter avec un seul fichier de démarrage

bash -v

Cette -v option permet d’ bashimprimer chaque ligne de chaque fichier de script lu au fur et à mesure de sa lecture.

Commencez par courir

bash -i -v >bash-i.out 2>&1

attendez 5 à 10 secondes, puis appuyez sur Ctrl+C.

Cela vous donnera un seul fichier appelé bash-i.outqui ressemble à tous vos fichiers de démarrage fusionnés (ou concaténés) ensemble.

Puis utilisez lesspour ouvrir le fichier et recherchez l’alias avec /aliasname.

Maintenant, comparez où cet alias apparaît par rapport aux autres lignes du fichier. Par exemple, sur la plupart des systèmes, /etc/bash.bashrcun commentaire en haut indique /etc/bash.bashrcet en ~/.bashrccontient un également.

S'il se situe au-dessus de votre position ~/.bashrc, il s'agit probablement d'un fichier de démarrage /etcdéfinissant l'alias. Sinon, il se trouve dans votre ~/.bashrcfichier ou dans un fichier inclus via sourceou .(commande à point).

Si cela ne montre pas l'alias, essayez

bash -l -v >bash-l.out 2>&1

Cela indique à bash d'être un shell de connexion, qui lit différents fichiers de démarrage, par exemple /etc/profile, ~/.bash_profileau lieu de /etc/bash.bashrcet ~/.bashrc.

bash -x

Si bash -vcela ne vous donne pas de réponse définitive, essayez de lancer bash -x, ce qui affiche les commandes exécutées par le shell, plutôt que les lignes lues par votre shell.

La méthode est fondamentalement la même que ci-dessus, sauf changer -ven -x. (Vous pouvez utiliser les deux ensemble si nécessaire.)

Exécuter avec un seul fichier de démarrage

bash -i --rcfile="$HOME/.bashrc"

et voyez si vous avez le pseudonyme.

Essayez la même chose avec rcfileset to /etc/bash.bashrcsi votre système en est équipé .

Alors essaye

bash -l --rcfile="$HOME/.bash_profile"

et faites la même chose avec chaque fichier de démarrage bash qui porte profileson nom, par exemple, changez $HOME/.bash_profilepour /etc/profile.

Quel que soit le moyen utilisé pour faire apparaître l’alias, il indique le fichier à regarder.

Mikel
la source
2

Peut-être votre .xinitrc? Vous devez également vérifier si votre .bashrcou la .bash_profilesource contient d’autres fichiers. Par exemple, je garde tous mes alias dans un fichier séparé référencé par cette commande:

[ -f ~/.bash_alias ] && source $HOME/.bash_alias

Quelques questions qui pourraient également aider: S'agit-il d'un utilisateur régulier ou root? De quelle commande s'agit-il? Quelle saveur de Linux?

SigueSigueBen
la source
0

Je suis la pratique très courante de mettre mes définitions de pseudonymes dans

~/.bash_aliases

puis en appelant cela depuis .bashrc avec

[ -f ~/.bash_aliases ] && source $HOME/.bash_aliases
Michael Durrant
la source
puis-je deviner que vous voulez dire .bash_aliases dans votre deuxième commande au lieu de .bash_alias?
stagl