Получение кода состояния при использовании конвейеров

Я запускаю следующую команду в 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 не сможет вернуть его из моего скрипта. Как я могу это сделать?

2
задан 9 October 2013 в 09:55

2 ответа

Решение - установить параметр pipefail перед запуском команды.

http://www.gnu.org/software/bash/manual/bashref.html

Если включен pipefail, состояние возврата конвейера равно последняя (самая правая) команда для выхода с ненулевым статусом или ноль, если все команды завершаются успешно.

Итак, теперь мой скрипт выглядит следующим образом:

set -o pipefail
cd SomeDir && (sh -c "$CMD_STR") 2>&1 | some_filtering | sed -u -e ....
exit $?
0
ответ дан 9 October 2013 в 09:55

Для проверки последнего статуса выхода кодируют в оболочке удара, можно использовать:

echo $?

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

sh -x /path/to/script

или

bash -x /path/to/script

Другие опции состоят в том, чтобы использовать set -x и set +x команды в сценарии для получения кода состояния для частей сценария.

Больше о:

0
ответ дан 9 October 2013 в 09:55

Другие вопросы по тегам:

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