Я запускаю следующую команду в bash-скрипте:
cd SomeDir && (sh -c "$CMD_STR") 2>&1 | some_filtering | sed -u -e ....
Т.е. Я запускаю CMD_STR в SomeDir (на самом деле CMD_STR - это «make» или «make target»), выполняю некоторую фильтрацию на выходе CMD_STR, а затем заменяю некоторые символы на «sed».
Мне нужно получить код состояния CMD_STR на случай, если CMD_STR не сможет вернуть его из моего скрипта. Как я могу это сделать?
Решение - установить параметр pipefail перед запуском команды.
http://www.gnu.org/software/bash/manual/bashref.html
Если включен pipefail, состояние возврата конвейера равно последняя (самая правая) команда для выхода с ненулевым статусом или ноль, если все команды завершаются успешно.
blockquote>Итак, теперь мой скрипт выглядит следующим образом:
set -o pipefail cd SomeDir && (sh -c "$CMD_STR") 2>&1 | some_filtering | sed -u -e .... exit $?
Для проверки последнего статуса выхода кодируют в оболочке удара, можно использовать:
echo $?
Также Вы сказали использование той команды в сценарии таким образом, для получения кода состояния можно запустить тот скрипт следующим образом:
sh -x /path/to/script
или
bash -x /path/to/script
Другие опции состоят в том, чтобы использовать set -x
и set +x
команды в сценарии для получения кода состояния для частей сценария.
Больше о: