timeout
- это команда - поэтому она выполняется в подпроцессе вашей оболочки bash. Поэтому он не имеет доступа к вашим функциям, определенным в вашей текущей оболочке.
Дана команда timeout
Выполняется как подпроцесс тайм-аута - процесс с большими дочерними элементами вашей оболочки.
Возможно, вы сбиты с толку, потому что echo
- это как встроенная оболочка, так и отдельная команда.
Что вы можете сделать, это поместить вашу функцию в свой собственный файл сценария, chmod это исполняемый файл, а затем выполнить его с помощью timeout
.
Альтернативно, вилка, выполняющая вашу функцию в подчиненной оболочке, - и в исходном процессе отслеживает прогресс, убивая подпроцесс, если он занимает слишком много времени.
http://stackoverflow.com/questions/12321469/retry-a-bash-command-with-timeout/35977896#35977896 –