Сценарий bash с несколькими командами papermill не дает сбоев при ошибках записной книжки

У меня есть refresh_data.sh файл, который содержит несколько команд бумажной фабрики, например:

papermill notebook_1.ipynb output_1.ipynb -p start "2017-12-01" -p date "2017-12-31"
papermill notebook_2.ipynb output_2.ipynb -p start "2018-01-01" -p date "2018-01-31"

Если я получаю сообщение об ошибке при запуске первой записной книжки, процесс продолжает выполнение второй.

Другими словами, ошибка в одной из записных книжек не «ломает» общий сценарий.

Насколько я помню, с обычными сценариями python, если есть ошибка в одной из команд внутри сценария bash, выполнение всего сценария прерывается.

Каково стандартное поведение сценария bash в этом случае? Могу ли я изменить его так, чтобы он останавливался при возникновении ошибки?


person Giacomo    schedule 02.04.2019    source источник


Ответы (1)


Если ваш сценарий bash настроен с: set -e, он завершится ошибкой, если команда выдаст ошибку:

Автоматический выход из сценария оболочки bash при ошибке

#!/bin/bash
set -e
# Any subsequent(*) commands which fail will cause the shell script to exit immediately

Вы можете запустить бумажную фабрику, используя:

--log-output, чтобы получить дополнительную информацию о том, почему ваш ноутбук вышел из строя.

papermill "${INPUT_NOTEBOOK_PATH}" "${OUTPUT_NOTEBOOK_PATH}" --log-output

Чтобы записать результат выполнения записной книжки, вы всегда можете записать результат любой предыдущей команды, используя $?:

  papermill "${INPUT_NOTEBOOK_PATH}" "${OUTPUT_NOTEBOOK_PATH}" --log-output
  notebook_result=$?
  if [[ ${notebook_result} -eq 0 ]]; then
    echo "All good"
  else
    echo $notebook_result
  fi
person gogasca    schedule 03.04.2019