¿Existe alguna forma de imprimir comandos de shell interpolados y al mismo tiempo conservar las redirecciones?
Supongamos que tengo el siguiente programa de shell.
#!/bin/sh
FOO="foo"
echo $FOO | cat
Quiero generar otro programa de shell que haga lo mismo que este, excepto que todas las variables de shell hayan sido sustituidas. Por ejemplo,
#!/bin/sh
echo "foo" | cat
Sé que puedo acercarme si ejecuto el programa anterior usando #!/bin/sh -x
, pero esa salida no conserva las redirecciones. En su lugar, obtengo
+ FOO=foo
+ echo foo
+ cat
foo
¿Alguna idea?
davy.ai
Sí, una posible solución es utilizar la sustitución de comandos. En lugar de asignar el valor de la variable
FOO
y luego enviarlo acat
, podemos sustituir directamente el valor deFOO
utilizando$(FOO)
y envolverlo entre comillas para manejar cualquier carácter especial. Aquí está el código modificado:Después de sustituir la variable, el programa shell será:
Esto mostrará
foo
y conservará la redirección.