Я пытаюсь запустить команду (запрос gerrit) в bash и назначить ее переменной. Я использую это файл сценария bash, и я хочу обработать случай, когда, если команда выдает ошибку (т. Е. Если запрос gerrit завершается неудачно), я должен иметь возможность обрабатывать то же самое.
Например:
var=`ssh -p $GERRIT_PORT_NUMBER $GERRIT_SERVER_NAME gerrit query --current-patch-set $PATCHSET_ID`
Я знаю, что могу проверить последний статус выхода, используя $? в bash, но для приведенного выше случая назначение переменной переопределяет более ранний статус выхода (т. е. статус ошибки запроса gerrit), и приведенная выше команда никогда не завершается ошибкой. Это всегда так.
Можете ли вы сообщить мне, есть ли способ обрабатывать статус выхода команды, даже если он назначен переменной в bash.
Обновление:
Мое предположение было неверным здесь, что назначение вызывало переопределение статуса выхода, и пример Чарльза и объяснение в его ответе верны. Настоящая причина переопределения статуса выхода заключалась в том, что я передал вывод вышеуказанной команды в сценарий sed, который был виновником переопределения статуса выхода. Я нашел следующее, что помогло мне решить проблему. https://unix.stackexchange.com/questions/14270/get-exit-status-of-process-thats-piped-to-another/73180#73180 Вывод канала и статус выхода в Bash
Полная команда, которую я пытался.
вар=ssh -p $GERRIT_PORT_NUMBER $GERRIT_SERVER_NAME gerrit query --current-patch-set $PATCHSET_ID | sed 's/message//'
gerrit
(например, запуск/bin/false
илиsh -c "exit 3"
)? - person Charles Duffy   schedule 09.10.2014