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_funcoset -o allexportpara 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.