¿Cómo ver el comando adjunto a un alias bash?

325

Supongamos que tengo un alias en el shell bash. ¿Hay un comando simple para imprimir qué comando ejecutará el alias?

Casebash
fuente

Respuestas:

432

La typeconstrucción es útil para esto. No solo le informará sobre los alias, sino también las funciones, las funciones integradas, las palabras clave y los comandos externos.

$ type ls
ls is aliased to `ls --color=auto'
$ type rm
rm is /bin/rm
$ type cd
cd is a shell builtin
$ type psgrep
psgrep is a function
psgrep () 
{ 
    ps -ef | { 
        read -r;
        printf '%s\n' "$REPLY";
        grep --color=auto "$@"
    }
}

type -a cmdmostrará todos los comandos por ese nombre en orden de precedencia, lo cual es útil para el lsalias anterior, donde el alias mismo llama ls.

$ type -a ls
ls is aliased to `ls --color=auto'
ls is /bin/ls

Esto le dice que cuando ejecute ls, /bin/lsse usará y --color=autose incluirá en su lista de argumentos, además de cualquier otro que agregue usted mismo.

geirha
fuente
¿Qué hacer cuando un alias contiene MÁS alias?
user251046
2
@ user251046 sigue usando typehasta que encuentres algo diferente a un alias ...
geirha
Me gusta esta respuesta porque typeanalizará / interpretará cualquier cita, por lo que puede asegurarse de que las citas sean correctas.
wisbucky
Tengo ls is aliased to 'ls --color=auto', pero ¿cómo puedo obtener una capa más profunda, para ver si usa / bin / ls o / usr / local / bin / ls o qué?
Krubo
1
@krubo type -a lsmostrará todos los comandos ls encontrados en orden de preferencia. Cualquiera que esté justo debajo del alias es el que será ejecutado por el alias.
geirha
163

Simplemente escriba aliasen el indicador de Shell. Debería generar una lista de todos los alias actualmente activos.

O bien, puede escribir alias [command]para ver a qué se alias un alias específico, por ejemplo, si desea saber a qué se lsalias alias, puede hacer alias ls.

Thomas Ward
fuente
12
O escriba alias lspara averiguar a qué lsse alias específicamente .
Poolie
2
@poolie De hecho. Sin embargo, creo que la pregunta era ver todos los alias, por lo que no di más detalles sobre el comando alias.
Thomas Ward
Si bien esto funciona para los alias, no funciona si ha definido una función de shell personalizada. typeSin embargo, funciona en ambos casos.
Sujay Phadke
53

Realmente me gusta Ctrl+ Alt+ Ecomo aprendí de esta respuesta . "Expande" la línea de comando actualmente escrita, lo que significa que realiza una expansión de alias (entre otras cosas).

Qué significa eso? Convierte cualquier alias, que podría estar actualmente escrito en la línea de comando, en lo que significa el alias.

Por ejemplo, si escribo:

$ ls

y luego presione Ctrl+ Alt+ E, se convierte en

$ ls --time-style=locale --color=auto
Der Hochstapler
fuente
¿Tiene esto un equivalente en otras distribuciones?
sepehr
@sepehr funciona en Debian, supongo que es una función bash y debería funcionar en cualquier distribución.
Der Hochstapler
44
tienes razón, funciona en bash pero tengo zsh y desafortunadamente no funciona.
sepehr
Fue realmente útil. Tenía un objetivo diferente de expandir uno de los comandos bash anteriores registrados en el historial, es decir,! 394, para poder editarlo primero antes de ejecutarlo
XXL
1
Tiene una advertencia. Cuando un alias incluye comillas necesarias, se eliminarán. Entonces, en squeue -u davidmh -o %.18i %.9P %.25j %.8u %.8T %.10M %.9l %.6D %R lugar desqueue -u davidmh -o "%.18i %.9P %.25j %.8u %.8T %.10M %.9l %.6D %R "
Davidmh
10

Hablando estrictamente, la respuesta correcta es usar la matriz BASH_ALIASES, por ejemplo:

$ echo ${BASH_ALIASES[ls]}
ls -F --color=auto --show-control-chars
noonex
fuente
2
Encontré esto útil en una situación en la que quería que el acceso programático a la declaración real tuviera un alias sin el material humano útil a su alrededor.
M. Justin
esto no funciona en zsh
ProGrammar
1
@ProGrammar la pregunta era sobre bash: para zsh deberías buscar preguntas sobre zsh
noonex el
1
Bingo. Exactamente lo que necesitaba, igual que @ M.Justin: quiero apilar más interruptores en el lsalias actual sin alterar lo que hay allí. Entonces voy alias ls="${BASH_ALIASES[ls]} --time-style=iso"por mi caso.
Rico
2

Podrías usar el whichcomando.

Si establece un alias para lsas ls -aly luego escribe which ls, verá:

ls: aliased to ls -al.

usuario312471
fuente
bash no tiene whichcomando.
geirha
No funciona para mí ..
Chiel ten Brinke
2
whiches una mala manera de buscar alias como se explica aquí: unix.stackexchange.com/questions/10525/… Ni siquiera funciona para mí para los alias en bash en Ubuntu.
Sujay Phadke