¿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?

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.


¿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.


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

¿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

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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.