También puede usar el método EOF Here Document para crear el script de varias líneas sobre la marcha. La principal ventaja es que puede usar comillas dobles sin escapar es:
timeout 1s bash <<EOF
sleep 2s
echo "something without escaping double quotes"
EOF
Notas:
- El cierre EOF no debe seguir espacios/tabulaciones, sino estar al comienzo de la última línea.
- Asegúrese de haber exportado funciones locales con
export -f my_func
oset -o allexport
para todas las funciones (antes de declararlas). Esto es relevante para las respuestas anteriores también, dado que llamar a bash/sh ejecuta el proceso en una nueva sesión, sin tener en cuenta las funciones del entorno local.
timeout
no es una utilidad de shell y no realiza procesamiento al estilo de shell. Se le debe dar un solo comando para ejecutar. Ese comando, sin embargo, puede tener cualquier cantidad de argumentos. Afortunadamente, uno de los comandos que puedes darle es bash
:
timeout 1 bash -c '{ sleep 2; echo something; }'
Por supuesto, de esta forma, las llaves ahora son superfluas:
timeout 1 bash -c 'sleep 2; echo something'
Aquí, bash
es el comando que timeout
ejecuta -c
y sleep 2; echo something
son argumento para ese comando.