Как выйти из оболочки, если подсистема завершилась с ошибкой

Вопрос или проблема

Есть скрипт 1.sh. 1.sh запускает 1a.sh, а затем 1b.sh.

Но как выйти из всех скриптов, как выйти из 1.sh и как не запускать 1b.sh, если 1b.sh завершится с ошибкой?

Просто сделайте это так:

#! /bin/sh -
1a.sh && 1b.sh

Или

#! /bin/sh -
1a.sh || exit
1b.sh

Или:

#! /bin/sh -
set -o errexit
1a.sh
1b.sh

Как вы бы сделали для каждой команды. То, что эти команды являются оболочечными скриптами (программами, написанными на языке оболочки; кстати, так мы не называем подсистемы) или нет (программами, написанными на другом языке, интерпретируемом или нет), здесь не имеет значения.

Ответ или решение

Чтобы корректно завершить выполнение скрипта 1.sh, если один из подскриптов (1a.sh или 1b.sh) завершится с ошибкой, можно применить несколько подходов. Все они обеспечат прерывание выполнения скрипта и выход из него в случае ошибки:

  1. Использование оператора логического AND (&&):
    Этот метод позволяет запускать следующий скрипт только в случае успешного завершения предыдущего.

    #! /bin/sh -
    1a.sh && 1b.sh

    В этом случае, если 1a.sh завершится с ошибкой, 1b.sh не будет выполнен.

  2. Использование оператора логического OR (||):
    Здесь можно явно указать выход из скрипта в случае ошибки:

    #! /bin/sh -
    1a.sh || exit
    1b.sh

    Если 1a.sh завершится с ошибкой, будет выполнена команда exit, и выполнение 1b.sh будет прервано.

  3. Установка опции errexit:
    Это более общий способ, который следует применять, когда требуется, чтобы любой неуспешный выходной статус завершал текущий скрипт:

    #! /bin/sh -
    set -o errexit
    1a.sh
    1b.sh

    В этом случае, если любой из скриптов (1a.sh или 1b.sh) завершится неудачно, выполнение скрипта 1.sh будет автоматически прервано.

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

Оцените материал
Добавить комментарий

Капча загружается...