timeout
è un comando, quindi è in esecuzione in un sottoprocesso della shell di bash. Pertanto non ha accesso alle tue funzioni definite nella tua shell corrente.
Il comando timeout
viene eseguito come sottoprocesso di timeout: un processo grand-child della shell.
Potresti essere confuso perché echo
è sia un built-in della shell che un comando separato.
Quello che puoi fare è mettere la tua funzione nel proprio file di script, chmod per essere eseguibile, quindi eseguirla con timeout
.
In alternativa fork, esecuzione della funzione in una sotto-shell - e nel processo originale, monitorare l'avanzamento, uccidere il sottoprocesso se richiede troppo tempo.
fonte
2012-03-31 09:51:22
http://stackoverflow.com/questions/12321469/retry-a-bash-command-with-timeout/35977896#35977896 –