LINUX.ORG.RU

Объединить.

Больше ничего в вопросе не понял.

pinus_nigra
()
Ответ на: комментарий от ABW

Спасибо, работает, но можете пояснить? Я где-то видел конструкции в которых команды были заключены в скобки или ковычки, например sh ‘echo error >> log && exit’ выглядит понятнее просто

WildUser
() автор топика
Ответ на: комментарий от WildUser

Немедленно останавливает выполнение, в случае ненулевого статуса команды. Я ман прикладывать, там довольно заумно написано.

Вот пример работы. Т.е. сначала ошибочная команда, но идём дальше, а потом останавливаемся на второй ошибочной и уже никуда не движемся дальше:

$ cat test_setE.sh 
#!/bin/bash

wrong_cmd_1
echo error#1

set -e

wrong_cmd_2
echo error#2

wrong_cmd_3
echo error#3
$ ./test_setE.sh 
./test_setE.sh: line 3: wrong_cmd_1: command not found
error#1
./test_setE.sh: line 8: wrong_cmd_2: command not found
$ 

Таким образом, интерпретатор сам остановит, где надо будет; остаётся только обеспечить наглядность выхлопа.

Например:

script.sh 2>./error.log 1>./out.log

NDfan
()
Ответ на: комментарий от WildUser

set [+abefhkmnptuvxBCEHPT] [+o option-name] [arg ...]

...

-e Exit immediately if a pipeline (which may consist of a single simple command), a list, or a compound command (see SHELL GRAMMAR above), exits with a non-zero status.

...

NDfan
()
Ответ на: комментарий от WildUser

set -e поменял в процессе выполнения скрипта, отношение интерпретатора к ошибкам: т.е. до этого просто предупреждал в stderr, а теперь уже сразу запрещает дальнейшее выполнение при первой обнаруженной.

При желании, кстати, можно ключевые места обрамлять так: set -e <cmd1 ; cmd2 ; ... ; cmdN> set +e, и остальные потенциальные сбои считать условно-допустимыми.

NDfan
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.