bash - есть ли обработчик конвейера c? - PullRequest
0 голосов
/ 06 марта 2020

Я помещаю ниже 2 строк в верхней части моего сценария оболочки, чтобы он завершился при любой ошибке

set -e
set -o pipefail

Затем я вызываю сценарий оболочки как: chmod u + x /tmp/install_master.sh;/tmp /install_master.sh & >> /tmp/logs/install_master.log

если я хочу отправлять журналы каждый раз, когда скрипт завершается с ненулевым значением, это лучший способ просто интерпретировать код возврата, как это?

chmod u+x /tmp/install_master.sh;/tmp/install_master.sh &>> /tmp/logs/install_master.log; rc=$? if [ rc -ne 0 ]; then aws s3 sync /tmp/logs/install_master.log s3://somewhere/; fi

или есть какой-то встроенный триггер on_pipefail, который я мог бы использовать?

Ответы [ 2 ]

0 голосов
/ 06 марта 2020

Предполагая, что install_master.sh возвращает ненулевой статус выхода, если это не удалось, тогда вы можете использовать || проверить ненулевое состояние выхода.

chmod u+x /tmp/install_masther.sh
/tmp/install_master.sh &>>/tmp/logs/install_master.log || {
  aws s3 sync /tmp/logs/install_master.log s3://somewhere/
}

Я не думаю, что pipefail здесь даже фактор, так как это не конвейер.

0 голосов
/ 06 марта 2020

Вместо «если» вы можете использовать логические операторы

chmod u+x /tmp/install_master.sh &> /tmp/logs/install_master.log  && \
/tmp/install_master.sh &>> /tmp/logs/install_master.log || \
aws s3 sync /tmp/logs/install_master.log s3://somewhere/
...