Назад | Перейти на главную страницу

Bash: сбой при ошибке во время раздела, а затем запуск другого раздела независимо?

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

#!/usr/bin/env bash
set -e
(
  # various commands go here
) &> /var/log/logfile
final_command_that_always_runs /var/log/logfile

Это возможно?

Возможно, я могу 'установить -e' только для одного () раздела скрипта?

Родители вызывают подоболочку, поэтому да, вы можете установить параметры внутри, и они не повлияют на родительскую оболочку.

Редактировать от автора вопроса: Я пометил это как ответ, но я подумал, что нужна демонстрация - как говорится в ответе, мне нужно было переместить set -e внутри парных скобок:

#!/usr/bin/env bash
(
    set -e
    echo 'one'
    ls -la /var/notexist/two
    echo 'three'
) &> /var/tmp/logfile
cp /var/tmp/logfile /var/tmp/logfile2