Остановка .bashrc, не выходя из оболочки

[1186453] Можно использовать и разрез:[12213] А если не хотите "kJ/mol", то труба с awk:[12214]
1
27.04.2016, 21:34
2 ответа

В BASH можно использовать return встроенный:

return [n]

вызывает функцию выхода со значением возврата, заданным n. Если n опущена, статус возврата - это статус последней команды, выполненной в функциональное тело. Если используется вне функции, но во время выполнения скрипт по команде . (источник), он заставляет оболочку остановиться. выполняя этот скрипт и возвращая либо n, либо статус выхода последнего команда, выполняемая внутри скрипта как статус выхода из скрипта.. Если используется вне функции, а не во время выполнения скрипта по .., возвращаемое состояние будет ложным. Любая команда, связанная с ловушкой RETURN выполняется до возобновления выполнения после функции или скрипта.

Для других оболочек он, конечно, может работать по-другому.

Если вы можете переписать основной скрипт в виде цикла, вы можете использовать оператор break, основанный на результатах команды цикла.

.
4
27.01.2020, 23:17

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

module_1
if [ $? -ne 0 ]; then
   display_error_function
else
   module_2
   if [ $? -ne 0 ]; then
      display_error_function
   else
      echo OK
   fi
fi

Когда у вас много модулей, рассмотрите дополнительную оболочку.
. EDIT: С помощью дополнительной переменной вы можете предотвратить глубокую вложенность (просто повторите if-block).

ERRORSFOUND=0
...
if [[ ${ERRORSFOUND} -eq 0 ]]; then
   module_x
   if [[ $? -ne 0 ]]; then
      ERRORSFOUND=1
   fi
fi
1
27.01.2020, 23:17

Теги

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