2016-03-24 2 views
0

У меня есть скрипт bash, который вызывает несколько скриптов (bash & python) из некоторых каталогов.Ошибка при возникновении ошибки/исключения?

Я бы хотел, чтобы он был прерван, когда какой-либо скрипт выдает ошибку/исключение.

#!/bin/bash 

/usr/bin/test.sh /usr/1/sample.sh /usr/2/temp.py 

exit 0 

Любое предложение о том, как этого достичь?

FYI: Я начинающий в стиле bash.

+1

Все зависит от состояния вывода и/или выхода из сценариев, которые вызывает ваш сценарий. Некоторые программы выводят ошибки, но продолжают работать, некоторые программы возвращают статус выхода 0 для успеха, а другие возвращают ненулевой успех. Некоторые программы выводят стандартный вывод на std-ошибку. –

+1

Также ваш код, который вызывает несколько сценариев, на самом деле вызывает один скрипт и передает остальные два в качестве аргументов. Я бы искал Google для руководства по написанию сценариев bash (есть некоторые действительно хорошие, легко найти руководства) и читать их. –

ответ

1

Вы можете поставить set -e в верхней части сценария:

-e errexit  If not interactive, exit immediately if any 
        untested command fails. The exit status of a com‐ 
        mand is considered to be explicitly tested if the 
        command is used to control an if, elif, while, or 
        until; or if the command is the left hand operand 
        of an “&&” or “||” operator. 

Это будет только работать, если один из ваших команд выхода с кодом выхода ненулевых на провал. Хорошие программы должны всегда выходить с 0 только на успех, а если ваш нет, вы, вероятно, захотите это исправить.

Я не совсем уверен, что вы ожидаете, чтобы это сделать:

/usr/bin/test.sh /usr/1/sample.sh /usr/2/temp.py 

Так как это будет работать одна команда (/usr/bin/test.sh) с двумя аргументами, вы, вероятно, хотите, чтобы положить их на отдельных строках.

Смежные вопросы