¿Cómo puedo encontrar una declaración de alias falso?

37

Estoy tratando de encontrar dónde aliasse ha declarado un específico . He buscado todos los lugares habituales que sé para buscar alias:

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

Sin suerte

Sé que es aliasporque cuando lo hago which COMMAND, obtengo:

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

¿Hay alguna manera de encontrar qué archivo declara aliassaber solo el aliasnombre?

utopía
fuente
3
Una pregunta relacionada sobre variables de entorno en lugar de alias. Básicamente, no hay una manera fácil ya que el alias podría haberse establecido en cualquier lugar. Intente colocar set -xcomo se sugiere en la parte superior de su y vea si eso lo reduce para usted.
jw013
1
Tendría que poner set -xen la parte superior de /etc/bash_profileo /etc/bashrc. ¿Por qué no simplemente correr bash -i -xo bash -l -x?
Mikel

Respuestas:

30

Yo buscaría /etc/profile.d/al ofensor alias.

También puede hacer lo siguiente para encontrarlo:

grep -r '^alias COMMAND' /etc

Esto hará recursivamente a greptravés de archivos buscando una línea que comience con alias COMMAND.

Si todo lo demás falla, pon esto al final de tu ~/.bashrc

unalias COMMAND
utopía
fuente
26

Hay algunas cosas que puedes probar:

  1. use bash -vpara ver qué líneas se leen durante el inicio del shell
  2. use bash -xpara ver qué comandos se ejecutan durante el inicio del shell
  3. ejecutar con un solo archivo de inicio

bash -v

La -v opción hace bashimprimir cada línea de cada archivo de script que lee mientras lo lee.

Comience corriendo

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

espere 5-10 segundos, luego presione Ctrl+C.

Esto le dará un solo archivo llamado bash-i.outque es como todos sus archivos de inicio combinados (o concatenados) juntos.

Luego, use lesspara abrir el archivo y busque el alias usando /aliasname.

Ahora, compare dónde aparece ese alias en relación con otras líneas en el archivo. Por ejemplo, en la mayoría de los sistemas, /etc/bash.bashrctiene un comentario en la parte superior que dice /etc/bash.bashrcy ~/.bashrctiene uno también.

Si está por encima de la parte superior de su ~/.bashrc, entonces es probable que sea un archivo de inicio /etcque defina el alias, de lo contrario, está en su ~/.bashrcarchivo o en un archivo que incluye a través de sourceo .(comando de punto).

Si eso no muestra el alias, intente

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

Eso le dice a bash que sea un shell de inicio de sesión, que lee algunos archivos de inicio diferentes, por ejemplo, /etc/profiley en ~/.bash_profilelugar de /etc/bash.bashrcy ~/.bashrc.

bash -x

Si bash -vno le da una respuesta definitiva, intente ejecutar bash -x, que imprime los comandos que ejecuta el shell, en lugar de las líneas que está leyendo su shell.

El método es básicamente el mismo que el anterior, excepto cambiar -va -x. (Puede usar ambos juntos si es necesario).

Ejecutar con un solo archivo de inicio

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

y mira si tienes el alias.

Intente lo mismo con rcfileset to /etc/bash.bashrcsi su sistema lo tiene.

Entonces intenta

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

y haga lo mismo con cada archivo de inicio de bash que tenga profilesu nombre, por ejemplo, cambie $HOME/.bash_profilea /etc/profile.

Cualquiera que sea la forma en que aparezca el alias le indica el archivo que debe comenzar a mirar.

Mikel
fuente
2

Tal vez tu .xinitrc? También debe verificar si su fuente .bashrco .bash_profilecualquier otro archivo en ellos. Por ejemplo, mantengo todos mis alias en un archivo separado al que hace referencia este comando:

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

Algunas preguntas que también podrían ayudar: ¿Es esto para un usuario habitual o root? ¿Qué comando es? ¿Qué sabor de Linux?

SigueSigueBen
fuente
0

Sigo la práctica muy común de poner mis definiciones de alias en

~/.bash_aliases

y luego llamar eso desde .bashrc con

[ -f ~/.bash_aliases ] && source $HOME/.bash_aliases
Michael Durrant
fuente
¿Puedo adivinar que te refieres a .bash_aliases en tu segundo comando en lugar de .bash_alias?
stagl