Tengo una función bash (o alias), por ejemplo function install() {sudo apt-get install $@}
. Al ejecutar el comando install dicelab
, lo que espero que realmente se ejecute es sudo apt-get install dicelab
. ¿Dónde puedo ver lo que realmente fue ejecutado por el shell? Me gustaría asegurarme de que mis alias más complicados funcionen como se esperaba.
20
$@
parte de tu alias? Recuerde que los alias realmente no admiten argumentos, que se expandirán a los parámetros posicionales (si los hay) del contexto que llama al alias. La forma habitual de ejecuciónsomealias some args
funciona simplemente expandiendo el alias y dejando los argumentos para seguirlo. Si realmente desea poder acceder a los argumentos, utilice una función y cite el"$@"
"$@"
, los argumentos con espacios en blanco o caracteres glob se quemarán de lo contrario.Respuestas:
Uso
set -x
en la cáscara.El uso de
set -x
vueltas en laxtrace
opción del shell (set +x
lo apaga) y debería funcionar en toda Bourne-como conchas, comobash
,dash
ksh93
,pdksh
yzsh
. Esto hace que el shell muestre el comando que se ejecuta después de que se hayan realizado expansiones de alias y expansiones variables, etc.El resultado estará en la secuencia de error estándar del shell (al igual que el indicador ordinario), por lo que no interferirá con las redirecciones del resultado estándar, y estará precedido por un indicador definido por la
PS4
variable del shell (+␣
por defecto).Ejemplo con algunas funciones:
Estoy corriendo con
set -x
todos mis shells interactivos por defecto. Es agradable ver lo que realmente se ejecutó ... pero he notado que la finalización programable de pestañas, etc., puede causar resultados de rastreo no deseados en algunos shells.fuente
Podrías usar
shell-expand-line
, que está obligado a Control- Alt- epor defecto:Entre otras cosas, reemplazará los alias en la línea actual con su definición para que pueda ver un comando que todavía va a ejecutar. Ejemplo:
fuente
shell-expand-line
?zsh
. Pero algunas personas han tenido sus propias ideas: wiki.math.cmu.edu/iki/wiki/tips/20140625-zsh-expand-alias.htmlPuede usar bash builtin
type
para ver un alias o una definición de función que va a ejecutar:fuente