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 argsfunciona 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 -xen la cáscara.El uso de
set -xvueltas en laxtraceopción del shell (set +xlo apaga) y debería funcionar en toda Bourne-como conchas, comobash,dashksh93,pdkshyzsh. 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
PS4variable del shell (+␣por defecto).Ejemplo con algunas funciones:
Estoy corriendo con
set -xtodos 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
typepara ver un alias o una definición de función que va a ejecutar:fuente