Vous pouvez également utiliser la méthode Here Document EOF pour créer le script multiligne à la volée. Le principal avantage est que vous pouvez utiliser des guillemets doubles sans échappement il :
timeout 1s bash <<EOF
sleep 2s
echo "something without escaping double quotes"
EOF
Remarques :
- La fermeture EOF ne doit pas suivre les espaces/tabulations, mais être au début de la dernière ligne.
- Assurez-vous d'avoir exporté les fonctions locales avec
export -f my_func
ouset -o allexport
pour toutes les fonctions (avant de les déclarer). Ceci est pertinent pour les réponses précédentes de même, depuis l'appel de bash/sh, exécutez le processus dans une nouvelle session, sans connaître les fonctions de l'environnement local.
timeout
n'est pas un utilitaire shell et il n'effectue pas de traitement de type shell. Il doit recevoir une seule commande à exécuter. Cette commande, cependant, peut avoir n'importe quel nombre d'arguments. Heureusement, l'une des commandes que vous pouvez lui donner est bash
:
timeout 1 bash -c '{ sleep 2; echo something; }'
Bien entendu, sous cette forme, les accolades sont désormais superflues :
timeout 1 bash -c 'sleep 2; echo something'
Ici, bash
est la commande que timeout
exécute. -c
et sleep 2; echo something
sont des arguments de cette commande.