Что делает set -e?


28

У меня есть скрипт, который я нашел, и я пытаюсь запустить его, он просто загружает и устанавливает библиотеки времени выполнения Apache. Первая строка set -eи это вызывает ошибку; что делает set -e?

Ответы:


22

Эта встроенная программа настолько сложна, что заслуживает отдельного раздела.

set позволяет изменять значения параметров оболочки и устанавливать позиционные параметры или отображать имена и значения переменных оболочки.

-eвариант

-e

Немедленно завершите работу, если конвейер (см. Конвейеры), который может состоять из одной простой команды (см. Простые команды), команды subshell, заключенной в скобки (см. Группирование команд), или одной из команд, выполняемых как часть списка команд, заключенного в фигурные скобки (см. Группировка команд) возвращает ненулевой статус. Оболочка не завершает работу, если сбойная команда является частью списка команд, который следует сразу после ключевого слова некоторое время или до, часть теста в операторе if, часть любой команды, выполняемой в && или || список, за исключением команды, следующей за последним символом && или ||, любой команды в конвейере, кроме последней, или если статус возврата команды инвертируется с!. Ловушка ERR, если установлена, выполняется до выхода из оболочки.

Этот параметр применяется к среде оболочки и каждой среде подоболочки отдельно (см. Среду выполнения команд) и может привести к выходу из подоболочек перед выполнением всех команд в подоболочке.

Источник: www.gnu.org

Отредактировано из-за комментария @ psusi ниже.

Дополнительно вы можете прочитать страницу руководства bash

man bash 

в разделе: ОБОЛОЧКИ, ВСТРОЕННЫЕ КОМАНДАМИ

или проблема

help set 

для краткого справочного сообщения.


1
Поскольку это встроенная команда, вам нужна help setполная инструкция по bash info bash, если у вас установлен bash-doc.
Псуси

Спасибо за разъяснения @psusi. help setи / или man bashявляются правильными для set.
NickTux

12

set -e короче говоря, когда он находится в верхней части вашего bash-скрипта, он сообщает, что скрипт должен завершиться, как только какая-либо строка в скрипте завершится неудачей (с некоторыми исключениями, перечисленными в руководстве.) [1]

Как вариант отладки, он часто используется с set -x, то есть печатает каждую расширенную командную строку перед выполнением со знаком «+». [2]

Смотрите больше на:

[1] https://www.peterbe.com/plog/set-ex

[2] http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_02_03.html


2
Спасибо за простое объяснение. Я часто вижу set -xe в Dockerfiles, и теперь я знаю причину :)
ymakux
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.