Un alias, como ll
se define con el alias
comando.
Puedo verificar el comando con cosas como type ll
qué impresiones
ll is aliased to `ls -l --color=auto'
o command -v ll
que imprime
alias ll='ls -l --color=auto'
o alias ll
que también imprime
alias ll='ls -l --color=auto'
pero parece que no puedo encontrar dónde se definió el alias, es decir, un archivo como .bashrc
, o quizás manualmente en el shell en ejecución. En este punto, no estoy seguro de si esto es posible.
¿Debo simplemente revisar todos los archivos cargados bash
y verificar cada uno de ellos?
bash -xl
Respuestas:
La definición manual será difícil de detectar (los registros del historial, tal vez) aunque le pida al shell que muestre lo que está haciendo y luego
grep
debería ayudar a encontrarlos en un archivo rc:Si el shell no captura con precisión las opciones necesarias con una de las invocaciones anteriores (que ejecutan interactivamente el comando nulo), entonces
script
:Otra opción sería usar algo como
strace
osysdig
para encontrar todos los archivos que toca el shell, luego ir agrep
ellos manualmente (útil si el shell o el programa no tiene una-x
bandera); los archivos RC estándar no son suficientes para una verificación manual del nombre de archivo si algo como oh-my-zsh o configuraciones específicas del sitio extraen código de quién sabe dónde (o también puede haber variables de entorno, como señala sorontar en su respuesta) .fuente
PS4='+The ll alias is "${BASH_ALIASES["ll"]}" ' bash -ixlc :
Aquí es donde me parece
grep -rl
muy útil:le dirá en qué archivo
alias
se usa la palabra .Probablemente en
~/.bashrc
y sin duda en~/.bash_aliases
si existe.Sin embargo, es imposible estar absolutamente seguro de que eso cubre todas las opciones. Esos archivos también pueden llamar o cargar cualquier otro archivo. Una variable de entorno como ENV o
$BASH_ENV
puede dirigir bash para cargar algunos otros archivos.Y los alias pueden incluso definirse estableciendo una variable (énfasis mío):
fuente
grep -rl alias ~/.bash*
puede coincidir falsamente con los archivos de historial, ¡pero +1 por señalar la matriz BASH_ALIASES!No conozco una forma de enumerar realmente la fuente de sus alias, pero dado que parece que está usando bash, creo que estos son los posibles archivos fuente:
Debería poder buscar entre ellos para encontrar el alias, por ejemplo
grep 'ls -l --color=auto' /etc/profile ~/.profile /etc/bash.bashrc ~/.bash_profile ~/.bashrc
.fuente
bash -x
, como mencionaste. Supuse que lo anterior era lo suficientemente fácil de ejecutar rápidamente y si no encuentra el alias, puede leer los pasos de ejecución.Combinando la respuesta de thrig con @ sugerencia de MarkPlotnick , se puede comprobar si
BASH_ALIASES[ll]
se ajusta a reducirlo. LaBASH_SOURCE
matriz y lasLINENO
variables son particularmente útiles aquí. Desafortunadamente, la verificación de siBASH_ALIASES[ll]
se establece solo tendrá éxito después de que se haya establecido el alias, por lo que la primera línea de este tipo podría estar en otro archivo por completo.Dando salida como:
Incluso puede terminar el shell utilizando esta verificación:
fuente
He tenido éxito simplemente usando
which
.fuente
which
puede manejar alias en tcsh (y tal vez csh anterior) y zsh donde está integrado, y en bash usando el perfil predeterminado en RedHat-family que tiene un kludge para ejecutar el programa GNU (externo) pero alimentarlo con datos de alias de shell, de lo contrario no . Más importante, solo dice en qué está configurado el alias, no dónde se configuró, cuál era la Q aquí.Marque ~ / .profile si no está en ~ / .bashrc
fuente
Finalmente encontré la
ll
definición de alias para nuestro servidor web (CentOS) en dos scripts de shell en/etc/profile.d/
:/etc/profile.d/colorls.csh
/etc/profile.d/colorls.sh
Lo encontré por primera aprendizaje a partir de los comentarios de arriba donde estaba el perfil de todo el sistema:
/etc/profile
. Ese archivo indica que los alias de todo el sistema están definidos/etc/bashrc
, y en ese archivo vi que recorre varios scripts de shell/etc/profile.d/
, así que utilicégrep
en ese directorio y finalmente encontré las definiciones. También descubrí que hay unl.
alias que enumera todos los archivos de puntos:De
colorls.sh
:(Hay alias equivalentes en
colorls.csh
.)fuente
Primero use los siguientes comandos
Listar todas las funciones
Listar todos los alias
Si no encuentra el alias o la función, considere un método de búsqueda más agresivo
Versión bash
Versión Zsh
Breve explicación de las opciones
fuente