Возврат статуса команды Busybox `timeout`

Я пишу сценарий оболочки, который должен работать в разных дистрибутивах, некоторые из которых используют busybox а некоторые – нет.

Этот скрипт использует команду timeout для определения того, выполнялась ли команда, выполняемая дольше, чем <time> или нет. В случае дистрибутивов, использующих timeout coreutils это не проблема, потому что когда timeout пришлось убить команду, он всегда возвращает 124 , так что это просто.

Моя проблема заключается в том, что когда я запускаю то же самое на Alpine Linux (который использует busybox), тогда статус выхода равен 0 после того, как таймауту пришлось убить команду, но когда я использую команду timeout из пакета busybox в Ubuntu, он выходит с 143 .

Почему две команды timeout , которые оба из busybox , дают мне другое возвращаемое значение?

Есть ли какая-либо согласованность или правило в том, что я могу использовать, чтобы определить, была ли или нет команда?

One Solution collect form web for “Возврат статуса команды Busybox `timeout`”

У Alpine Linux, возможно, есть более ранняя версия busybox. Простое решение состоит в том, чтобы добавить к вашей исходной команде другую команду, которая имеет некоторый побочный эффект, который вы можете протестировать, например, написание некоторого вывода на stdout или файл.

Например, если вы хотите перерыв 1 для первоначальной команды sleep 2 , вместо

 timeout 1 sleep 2 

делать

 ok=$(timeout 1 bash -c 'sleep 2; echo ok') 

и проверить $ok для ok. Очевидно, что если ваша команда пишет в stdout, вам нужно перенаправить ее, например, дублировать ее на fd 3 и перенаправить на нее:

 exec 3>&1 ok=$(timeout 1 bash -c 'my command >&3; echo ok') exec 3>&- 

или сделать echo ok в файл.

  • Как ответить grep, чтобы выяснить, сколько звонков было рассчитано на время?
  • Почему «до» блок спроектирован, так как это всего лишь отрицательная версия `while`?
  • Получайте отдельную информацию о памяти из free -m comand
  • Игнорировать специальные символы в сравнении с сценарием оболочки
  • Переименование файлов рекурсивно в sh
  • Сценарий оболочки ionCube дает ошибку
  • запись файла команды в файл
  • Я хочу скопировать удаленный файл txt через SSH, но без использования корневого доступа
  • Как я могу проверить файл, имеющий значение?
  • ни одна учетная запись пользователя не может войти через ssh
  • Перенесите stderr и stdout в / dev / null с помощью / bin / sh
  • Linux и Unix - лучшая ОС в мире.