Sé que hay un conjunto específico de reglas que expanden los comandos que el usuario escribió. (hablemos de bash shell)
¿Es posible imprimir un comando en el formulario después de la expansión de shell? Parece ser una buena utilidad para aprender y asegurarse de cómo shell expande caracteres especiales.
p.ej
$ echo *
{all the filenames in current dir}
Quiero imprimir el comando expandido, que es la siguiente línea:
echo {all the filenames in .}
echo cat * | someprogram
que no hacen lo que podría pensar de esta respuesta.Puedes usar
set -x
.Por ejemplo, considere el script:
Cuando se ejecuta, muestra la
echo
declaración expandida antes de ejecutarla realmente:Y, como señala Kundor, esto también funciona interactivamente en la línea de comando:
Documentación
man bash
explica lo queset -x
hace lo siguiente:El valor predeterminado para
PS4
es, como se muestra arriba, un signo más seguido de un espacio.fuente
Para un shell interactivo, presionar
Ctrl+x
seguido de*
después de escribir el patrón glob editará su línea de comando con ese patrón glob expandido. Desde la página de manual de bash:También te puede interesar glob-list-expansions (
Ctrl+x
,g
).fuente
Ctrl+x, *
inmediatamente después de escribirecho *
y antes de presionar la tecla Intro? Si aún no funciona, puede modificar~/.inputrc
y vincular glob-expand-word a otra cosa.Ctrl+x
seguido deShift+8
. Puede intentar ver siCtrl+x, g
funciona o, como dije antes, asignar su propia clave en el.inputrc
archivo.Si desea ver cómo se expanden o se tokenizan los argumentos, puede usar un programa o script que imprima sus argumentos. Aquí hay una implementación en
bash
:Suponiendo que pones eso en un archivo llamado
printargs.sh
(y lo hiciste ejecutable), obtendrías un resultado como estefuente