timeout
est une commande - elle s'exécute donc dans un sous-processus de votre shell bash. Elle n'a donc pas accès aux fonctions définies dans votre shell actuel.
La commande timeout
est donné est exécuté comme un sous-processus de timeout - un processus petit-enfant de votre shell.
Vous pouvez être confus parce que echo
est à la fois un shell intégré et une commande séparée.
Ce que vous pouvez faire, c'est mettre votre fonction dans son propre fichier script, le modifier pour qu'il soit exécutable, puis l'exécuter avec timeout
.
Une autre solution consiste à forker, en exécutant votre fonction dans un sous-shell - et dans le processus original, à surveiller la progression, en tuant le sous-processus si cela prend trop de temps.