Как иметь сценарий удара, выполняют определенное действие с ошибками команды _each_?

Bash запись FAQ № 68: "Как я выполняю команду и имею ее аварийное прекращение работы (тайм-аут) после N секунды?"

СНАЧАЛА проверьте, может ли команда, которую Вы выполняете, быть сказана тайм-ауту непосредственно. Методы, описанные здесь, являются "hacky" обходными решениями, чтобы вынудить команду завершиться после того, как определенное время протекло. Конфигурирование Вашей команды правильно всегда предпочтительно для альтернатив ниже.

Если команда не имеет никакой собственной поддержки остановки после требуемого времени, то лучшие альтернативы являются некоторыми внешними командами, названными тайм-аутом и doalarm. Некоторые дистрибутивы Linux предлагают tct версию timeout как пакет. Существует также версия GNU тайм-аута, включенного в недавние выпуски coreutils.

2
27.04.2016, 21:27
1 ответ

Как намекнули в этом вопросе, ответ настраивает a trap на ERR сигнал - в основном set -e соответствует trap 'exit' ERR. Таким образом к, например, ошибки журнала, но продолжают выполнение, используют

trap 'logger -t myscriptname "Command $BASH_COMMAND exited with code $?"' ERR

В ударе, переменной $BASH_COMMAND содержит незаконную команду. $? содержит код выхода последней выполняемой команды - отмечают это, если Вы хотите выполнить несколько действий, например. logger ...; echo $? $? будет содержать loggerкод выхода, нет $BASH_COMMANDодин, таким образом, Вам, вероятно, придется сохранить его в переменной сначала, например.

trap 'EXITCODE=$?; logger -t "Command $BASH_COMMAND exited with code $EXITCODE"; echo "$BASH_COMMAND at line $LINENO exited with code $EXITCODE"' ERR

Конечно, Вы могли бы быть более обеспеченным объявлением функции и передачей его $? и $BASH_COMMAND вместо такой длинной линии!

3
27.01.2020, 22:06
  • 1
    @Gilles Это является немного подлым для редактирования в ksh в вопрос потребовать этого редактирования :P Но в то время как Вы в нем, есть ли подобная переменная в ksh и там другие важные различия? –  Tobias Kienzler 15.11.2013, 09:49

Теги

Похожие вопросы