Исключение повышения на оболочке управляет отказом?

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

В основном я ищу что-то, что делает эквивалент:

set -o errexit

... в сценарии Bash. Идеально, решение повысило бы исключение, когда команда перестала работать (т.е. путем проверки на ненулевое возвращаемое значение), возможно, с stderr как сообщение. Это не было бы слишком трудно для записи, но кажется, что это уже должно существовать. Существует ли опция, которую я просто не нахожу?

7
задан Benjamin Oakes 8 February 2010 в 22:19
поделиться

2 ответа

Самый простой способ - создать новую функцию (или переопределите существующий), чтобы вызвать system () и проверить код ошибки.

Примерно так:

old_sys = system

def system(...)
  old_system(...)
  if $? != 0 then raise :some_exception
end

Это должно делать то, что вы хотите.

9
ответ дан 6 December 2019 в 07:06
поделиться

Вы можете использовать одну из специальных переменных Ruby. $? (аналог того же сценария оболочки var).

`ls`
if $?.to_s == "0"
  # Ok to go
else
  # Not ok
end

Почти каждая программа устанавливает эту переменную в 0, если все прошло нормально.

7
ответ дан 6 December 2019 в 07:06
поделиться
Другие вопросы по тегам:

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