Un alias, tel que ll
est défini avec la commande alias
.
Je peux vérifier la commande avec des choses comme type ll
qui imprime
ll is aliased to `ls -l --color=auto'
ou command -v ll
qui imprime
alias ll='ls -l --color=auto'
ou alias ll
qui imprime aussi
alias ll='ls -l --color=auto'
mais je ne peux pas sembler trouver où l'alias a été défini, c'est-à-dire un fichier tel que .bashrc
, ou peut-être manuellement dans la coquille courante. À ce stade, je ne suis pas sûr que cela soit encore possible.
Devrais-je simplement passer à travers tous les fichiers chargés de bash
et vérifiez chacun d'entre eux?
La définition manuelle sera difficile à repérer (les journaux d'historique, peut-être) mais demander à la coquille de montrer ce qu'il fait, puis grep
devrait aider à trouver ceux-ci dans un fichier RC:
bash -ixlc : 2>&1 | grep ...
zsh -ixc : 2>&1 | grep ...
Si la coque ne captive pas avec précision les options nécessaires avec l'une des invocations ci-dessus (qui exécutent de manière interactive la commande NULL), alors script
:
script somethingtogrep thatstrangeshell -x
...
grep ... somethingtogrep
Une autre option serait d'utiliser quelque chose comme strace
ou sysdig
_ à trouver tous Les fichiers touchent, puis allez grep
ceux manuellement (pratiques si La coquille ou le programme n'a pas de -x
drapeau); Les fichiers RC standard ne sont pas suffisants pour un chèque de nom de fichier manuel si quelque chose comme des configurations OH-My-My-ZSH ou Site-SPO-SIGE se tient à partir de qui sait où (ou également des variables d'environnement, comme le souligne Sorontar dans leur réponse) .
Voici où je trouve grep -rl
très utile:
grep -rl alias ~/.bash* ~/.profile /etc/profile /etc/bash.bashrc
vous dira dans quel fichier le mot alias
est utilisé.
Probablement dans ~/.bashrc
et très certainement dans ~/.bash_aliases
s'il existe.
Il est toutefois impossible d'être absolument sûr que cela couvre toutes les options. Ces fichiers peuvent également appeler ou charger tout autre fichier. Une variable d'environnement comme env ou $BASH_ENV
peut diriger Bash pour charger d'autres fichiers.
recherche la variable Bash_env dans l'environnement, élargit sa valeur s'il l'apparaît et utilise la valeur étendue comme nom d'un fichier à lire et à exécuter.
Et des alias peuvent même être définis en définissant une variable (emphase mine):
Bash_aliases
[.____] une variable de matrice associative dont les membres correspondent à la liste interne des alias comme maintenus par l'alias intégré. Les éléments ajoutés à ce tableau apparaissent dans la liste d'alias
Je ne connais pas un moyen de répertorier la source de vos alias, mais comme il semble que vous utilisiez Bash, je pense que ce sont les fichiers source possibles:
/etc/profile
~/.profile
/etc/bash.bashrc
~/.bash_profile
~/.bashrc
Vous devriez être capable de grep à travers ceux de trouver l'alias, par ex. grep 'ls -l --color=auto' /etc/profile ~/.profile /etc/bash.bashrc ~/.bash_profile ~/.bashrc
.
Combinaison Réponse de Thrig avec Suggestion de @ MarkPlotnick , vous pouvez vérifier si BASH_ALIASES[ll]
est défini pour la réduire. Les BASH_SOURCE
Array et LINENO
variables sont particulièrement utiles ici. Malheureusement, le chèque si BASH_ALIASES[ll]
est défini ne réussira que après l'alias a été défini, et la première ligne de ce type pourrait donc être dans un autre fichier.
PS4='${BASH_ALIASES["ll"]+"The ll alias has been defined before"} ${BASH_SOURCE}:$LINENO ' bash -lixc : |&
grep 'll alias' -m1 -B1
Donner une sortie comme:
/home/muru/.bash_aliases:1 alias 'll=ls -AlhF'
TThe ll alias has been defined before /home/muru/.bashrc:116 alias 'ping=ping -c5'
Vous pouvez même mettre fin à la coquille en utilisant ce chèque:
$ PS4='${BASH_ALIASES["ll"]+"$(kill -9 $$)"} ${BASH_SOURCE}:$LINENO ' bash -lixc : |& tail -n1
/home/muru/.bash_aliases:1 alias 'll=ls -AlhF'