Un alias, tel que ll
défini avec la alias
commande.
Je peux vérifier la commande avec des choses comme les type ll
impressions
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 également
alias ll='ls -l --color=auto'
mais je n'arrive pas à trouver où l'alias a été défini, c'est-à-dire un fichier tel que .bashrc
, ou peut-être manuellement dans le shell en cours d'exécution. À ce stade, je ne sais pas si cela est même possible.
Dois-je simplement parcourir tous les fichiers qui sont chargés par bash
et vérifier chacun d'eux?
bash -xl
Réponses:
La définition manuelle sera difficile à repérer (les journaux d'historique, peut-être) bien que demander au shell de montrer ce qu'il fait et
grep
devrait ensuite aider à trouver ceux définis dans un fichier rc:Si le shell ne capture pas précisément les options nécessaires avec l'une des invocations ci-dessus (qui exécutent la commande null de manière interactive), alors
script
:Une autre option serait d'utiliser quelque chose comme
strace
ousysdig
de trouver tous les fichiers que le shell touche, puis de les passergrep
manuellement (pratique si le shell ou le programme n'a pas d'-x
indicateur); les fichiers RC standard ne sont pas suffisants pour une vérification manuelle du nom de fichier si quelque chose comme oh-my-zsh ou des configurations spécifiques au site extrait du code de qui sait où (ou il peut également y avoir des variables d'environnement, comme le souligne sorontar dans sa réponse) .la source
PS4='+The ll alias is "${BASH_ALIASES["ll"]}" ' bash -ixlc :
Voici où je trouve
grep -rl
très utile:vous indiquera dans quel fichier le mot
alias
est utilisé.Probablement dans
~/.bashrc
et très certainement~/.bash_aliases
s'il existe.Il est cependant 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 demander à bash de charger d'autres fichiers.Et les alias peuvent même être définis en définissant une variable (accent sur le mien):
la source
grep -rl alias ~/.bash*
peut correspondre faussement aux fichiers d'historique, mais +1 pour avoir signalé le tableau BASH_ALIASES!Je ne connais pas de moyen de répertorier la source de vos alias, mais comme il semble que vous utilisez bash, je pense que ce sont les fichiers source possibles:
Vous devriez pouvoir les parcourir pour trouver l'alias, par exemple
grep 'ls -l --color=auto' /etc/profile ~/.profile /etc/bash.bashrc ~/.bash_profile ~/.bashrc
.la source
bash -x
, comme vous l'avez mentionné. J'ai pensé que ce qui précède était assez facile à exécuter rapidement et s'il ne trouve pas l'alias, vous pouvez lire les étapes d'exécution.En combinant la réponse de thrig avec la suggestion de @ MarkPlotnick , vous pouvez tester si elle
BASH_ALIASES[ll]
est définie pour la réduire. LeBASH_SOURCE
tableau et lesLINENO
variables sont particulièrement utiles ici. Malheureusement, la vérification de laBASH_ALIASES[ll]
définition de ce paramètre ne réussira qu'après la définition de l'alias, de sorte que la première ligne de ce type pourrait se trouver dans un autre fichier.Donner une sortie comme:
Vous pouvez même terminer le shell en utilisant cette vérification:
la source
J'ai eu du succès en utilisant simplement
which
.la source
which
peut gérer les alias dans tcsh (et peut-être plus tôt csh) et zsh où il est intégré, et dans bash en utilisant le profil par défaut sur la famille RedHat qui a un kludge pour exécuter le programme GNU (externe) mais lui donne des données d'alias shell, sinon pas . Plus important, il indique uniquement à quoi l'alias est défini, pas où il a été défini, ce qui était le Q ici.Vérifiez ~ / .profile s'il n'est pas dans ~ / .bashrc
la source
J'ai finalement trouvé la
ll
définition d'alias pour notre serveur Web (CentOS) dans deux scripts shell dans/etc/profile.d/
:/etc/profile.d/colorls.csh
/etc/profile.d/colorls.sh
Je l' ai trouvé d'abord l' apprentissage des commentaires ci - dessus où le profil de l' ensemble du système a été:
/etc/profile
. Ce fichier indique que les alias à l'échelle du système sont définis dans/etc/bashrc
, et dans ce fichier, j'ai vu qu'il boucle à travers plusieurs scripts shell dans/etc/profile.d/
, et donc j'ai utiliségrep
dans ce répertoire et j'ai finalement trouvé les définitions. J'ai également découvert qu'il existe unl.
alias qui répertorie tous les fichiers de points:De
colorls.sh
:(Il existe des alias équivalents dans
colorls.csh
.)la source
Utilisez d'abord les commandes suivantes
Liste toutes les fonctions
Liste tous les alias
Si vous ne trouvez pas l'alias ou la fonction, envisagez une méthode de recherche plus agressive
Version bash
Version Zsh
Brève explication des options
la source