Що робить набір -e?


28

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

Відповіді:


22

Цей вбудований настільки складний, що заслуговує власного розділу.

Набір дозволяє змінювати значення параметрів оболонки та встановлювати позиційні параметри, або відображати імена та значення змінних оболонок.

-eваріант

Вийдіть негайно, якщо конвеєр (див. Трубопроводи), який може складатися з однієї простої команди (див. Прості команди), команди підрозділу, вкладеної в дужки (див. Групування команд), або однієї з команд, виконаних у складі списку команд, доданого дужки (див. Групування команд) повертає ненульовий статус. Оболонка не виходить, якщо команда, яка не вдається, є частиною списку команд відразу після деякого часу або до появи ключового слова, частина тесту в операторі if, частина будь-якої команди, виконаної в && або || список, за винятком команди після остаточного && або ||, будь-якої команди в конвеєрі, але останньої, або якщо стан повернення команди інвертується !. Папка на ERR, якщо вона встановлена, виконується до виходу оболонки.

Ця опція застосовується до середовища оболонки та кожного середовища підшалі окремо (див. Середовище виконання команд) та може призвести до того, що підпускові оболонки вийдуть перед виконанням всіх команд в підкашлі.

Джерело: www.gnu.org

Відредаговано через коментар @ psusi нижче.

Крім того, ви можете прочитати сторінку керівництва bash

man bash 

у розділі: ПОШУКАЙТЕ БУДІВЕЛЬНІ КОМАНДИ

або видавати

help set 

коротке повідомлення про допомогу.


1
Оскільки це вбудована команда, ви хочете, help setі повне керівництво bash є info bash, якщо у вас встановлений bash-doc.
psusi

Дякуємо за уточнення @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.