Поймать код выхода в выводе bash-скрипта на экран и войти
Я пытаюсь объединить две строки, которые работают отдельно, но я не могу заставить их работать вместе. Для захвата и выхода из кода 1:
Python script.py > /logfile.log 2>&1
ret=$?
if [ $ret -ne 0 ]; then
exit $ret
fi
Чтобы вывести результат скрипта на экран и в файл журнала:
Python script.py 2>&1 | tee /logfile.log
Я хочу объединить эти 2 команды, чтобы скрипт выводил на экран и в файл журнала, а также ловил код выхода 1, чтобы прервать выполнение сценария в случае его сбоя. Я пытался комбинировать их по-разному, но скрипт либо продолжает работать, либо ничего не выводится на экран. Можно ли это сделать?
1 ответ
Решение
Используйте массив PIPESTATUS:
Python script.py 2>&1 | tee /logfile.log
ret="${PIPESTATUS[0]}"
if [[ "$ret" -ne "0" ]]; then
exit "$ret"
fi
Из man bash
:
PIPESTATUS
Переменная массива (см. Массивы ниже), содержащая список значений состояния выхода из процессов в самом последнем выполняемом конвейере переднего плана (который может содержать только одну команду).