2010-04-10 25 views
34

¿Cómo puedo averiguar dónde se define un alias en mi sistema? Me refiero al tipo de alias que se utiliza en una sesión de Terminal lanzada desde Mac OS X (10.6.3).Cómo saber dónde se define alias (en el sentido bash) cuando se ejecuta Terminal en Mac OS X

Por ejemplo, si entro en el comando alias sin parámetros en un símbolo terminal, me sale una lista de alias que he puesto, por ejemplo:

alias mysql='/usr/local/mysql/bin/mysql' 

Sin embargo, he buscado por todas partes mi sistema usando Spotlight y mdfind en varios archivos de inicio y hasta ahora no puedo encontrar dónde se ha definido este alias. (Lo hice hace mucho tiempo y no escribí donde asigné el alias).

+0

Esta pregunta es (ahora) fuera de tema para StackOverflow, y fue respondida [en Unix y Linux.SE] (https://unix.stackexchange.com/questions/38330/how-can-i-find-a- rogue-alias-declaration). –

+0

Voy a cerrar esta pregunta como fuera de tema porque pertenece a U & L (https://unix.stackexchange.com/questions/38330/how-can-i-find-a-rogue-alias-declaration) o Superusuario. –

Respuesta

1

Encontré la respuesta (había estado mirando el archivo correcto, pero olvidé lo obvio).

Los alias de mi caso se definen en el archivo ~/.bash_profile

De alguna manera esto me escapaba.

+0

gracias, intenté .bashrc y .bash_aliases, olvidé que era .bash_profile – neaumusic

22

simplemente puede escribir alias en el símbolo del sistema para ver qué alias tiene. De lo contrario, se puede hacer un find en los lugares más comunes donde se definen los alias, por ejemplo

grep -RHi "alias" /etc /root 
0

Creo que tal vez esto es similar a lo que significaba ghostdog74 sin embargo su mando no funcionaba para mí.

me gustaría probar algo como esto:

for i in `find . -type f`; do # find all files in/under current dir 
echo "========" 
echo $i       # print file name 
cat $i | grep "alias"   # find if it has alias and if it does print the line containing it 
done 

Si usted quería ser realmente de lujo incluso se podría añadir una if [[ grep -c "alias" ]] then <print file name>

+3

Le han otorgado el "[Uso inútil del Premio Gato] (http://partmaps.org/era/unix/award.html)". En lugar de 'cat $ i | grep "alias" 'debes colocarlo como el último argumento de' grep'. P.ej. 'grep" alias "$ i'. – johankj

+2

En lugar de loop, backtick, find, echo y cat, un simple 'grep -R alias .' hará lo que sugiera. Sin embargo, el quid de la cuestión es * dónde buscar *. – dimo414

12

También en el futuro estos son los archivos fiesta de configuración estándar

  • /etc/profile
  • ~/.bash_profile o ~/.bash_login o ~/.profile
  • ~/.bash_logout
  • ~/.bashrc

Más información: http://www.heimhardt.com/htdocs/bashrcs.html

+2

'/ etc/bashrc' también se puede consultar. –

+1

En algunas máquinas '/ etc/bashrc' se puede llamar'/etc/bash.bashrc'. Está en mi máquina Debian 7 de todos modos. –

+1

Además, algunas distribuciones configuran todo el sistema en '/ etc/bash /'. –

1

Para configuraciones más complejas (por ejemplo, cuando está utilizando un framework de script de shell como bash-it, oh-my-zsh o los me gusta) a menudo es útil agregar 'alias mysql' en las posiciones clave en sus scripts. Esto te ayudará a descubrir exactamente cuándo se agrega el alias.

por ejemplo:

echo "before sourcing .bash-it:" 
alias mysql 
. $HOME/.bash-it/bash-it.sh 
echo "after sourcing bash:" 
alias mysql 
6

Un poco tarde a la fiesta, pero yo estaba teniendo el mismo problema (tratando de encontrar donde el comando "l". Se alias en RHEL6), y terminó en un lugar no mencionado en las respuestas anteriores. Es posible que no se encuentre en todas las implementaciones de bash, pero si el directorio /etc/profile.d/ existe, pruebe grepping para alias inexplicables.Ahí es donde me encontré:

[[email protected] ~]$ grep l\\. /etc/profile.d/* 
/etc/profile.d/colorls.csh:alias l. 'ls -d .*' 
/etc/profile.d/colorls.csh:alias l. 'ls -d .* --color=auto' 
/etc/profile.d/colorls.sh: alias l.='ls -d .*' 2>/dev/null 
/etc/profile.d/colorls.sh:alias l.='ls -d .* --color=auto' 2>/dev/null 

El directorio no se menciona en la página de manual de bash, y no es propiamente parte de dónde ha de buscar bash perfil info/arranque, pero en el caso de RHEL se puede ver la llamada código dentro de/etc/profile:

for i in /etc/profile.d/*.sh ; do 
    if [ -r "$i" ]; then 
    if [ "${-#*i}" != "$-" ]; then 
     . "$i" 
    else 
     . "$i" >/dev/null 2>&1 
    fi 
    fi 
done 
26

para OSX, esta secuencia de 2 etapas funcionó bien para mí, en la localización de un alias que había creado hace mucho tiempo y no pudo encontrar en el lugar esperado (~/.zshrc)

cweekly:~ $ which la 
la: aliased to ls -lAh 

cweekly:~$ grep -r ' ls -lAh' ~ 
/Users/cweekly//.oh-my-zsh/lib/aliases.zsh:alias la='ls -lAh' 

Aha! "Ocultar" en ~/.oh-my-zsh/lib/aliases.zsh. He hurgado un poco en .oh-my-zsh pero había pasado por alto lib/aliases.zsh.

HTH

+0

¡Gracias por esto! –

+0

Esto es fuerza bruta pero efectivo y no requiere ninguna conjetura. Parece la manera más fácil de ir. – jcollum

-6

En mi caso, utilizo Oh My Zsh, por lo que poner alias definición en archivo ~/.zshrc.

+0

Publicado con más detalle hace dos años y medio. –

+0

La cuestión es que no puede recordar dónde se definieron los alias en Mac OSX con los que me había topado, así que simplemente proporciono la ubicación del archivo (~/.zshrc) que funcionó para mí (uso Oh My Zsh). Realmente no sé a qué te refieres con más detalles. – ryan

+2

Es decir, una [respuesta existente de noviembre de 2014] (https://stackoverflow.com/questions/2614403/how-to-find-out-where-alias-in-the-bash-sense-is-defined-when -running-terminal/43245187 # 26742455) ya dijo todo en esta respuesta y también agregó más. –

Cuestiones relacionadas