Автоматический выход из скрипта оболочки bash при ошибке

Сначала установите пакет rjson :

install.packages("rjson")

Затем:

library("rjson")
json_file <- "http://api.worldbank.org/country?per_page=10®ion=OED&lendingtype=LNX&format=json"
json_data <- fromJSON(paste(readLines(json_file), collapse=""))

Обновление: начиная с версии 0.2.1

json_data <- fromJSON(file=json_file)

538
задан codeforester 23 July 2019 в 01:51
поделиться

4 ответа

Используйте встроенную команду set -e :

#!/bin/bash
set -e
# Any subsequent(*) commands which fail will cause the shell script to exit immediately

В качестве альтернативы вы можете передать -e в командной строке:

bash -e my_script.sh

Вы также можете отключить это поведение с set + e .

Вы также можете использовать все или некоторые из параметров -e -u -x и -o pipefail следующим образом:

set -euxo pipefail

-e завершает работу при ошибке, -u ошибки для неопределенных переменных и -o (для параметра) pipefail завершает работу при сбоях командной строки. Некоторые ошибки и обходные пути хорошо документированы здесь .

(*) Примечание:

Оболочка , но не завершает работу, если команда, которая завершилась ошибкой, является частью список команд, следующий сразу после ключевого слова , а или до ключевого слова , часть теста после if или elif зарезервированных слов, часть любой команды, выполняемой в списке && или || , кроме команды после последнего && или || , любая команда в конвейере, но последний, или если возвращаемое значение команды инвертируется с !

(из man bash )

875
ответ дан 22 November 2019 в 22:13
поделиться

Чтобы выйти из сценария, как только одна из команд завершилась неудачно, добавьте в начало следующее:

set -e

Это заставит сценарий немедленно выйти, когда какая-либо команда, не являющаяся частью теста (например, в условии if [ ... ] или конструкции &&), завершится с ненулевым кодом выхода.

64
ответ дан 22 November 2019 в 22:13
поделиться

Я думаю, что вы ищете команду trap :

trap command signal [signal ...]

Для получения дополнительной информации см. на этой странице .

Другой вариант - использовать команду set -e в верхней части сценария - она ​​завершит работу сценария, если какая-либо программа / команда вернет неверное значение.

17
ответ дан 22 November 2019 в 22:13
поделиться

Одна из идиом такова:

cd some_dir && ./configure --some-flags && make && make install

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

20
ответ дан 22 November 2019 в 22:13
поделиться
Другие вопросы по тегам:

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