Переменная окружения bash $PIPESTATUS
- это массив, содержащий состояния каждой части конвейера последней команды.Например:
$ false | true; echo "PIPESTATUS: ${PIPESTATUS[@]}; ?: $?"
PIPESTATUS: 1 0; ?: 0
Таким образом, вместо рефакторинга вашего сценария Perl вам просто нужен сценарий, запускающий команду piped для проверки $PIPESTATUS
.Использование $PIPESTATUS
без [@]
дает значение первого элемента массива.
Если вам нужно проверить состояние как исходного исполняемого файла, так и сценария perl, вы хотите назначить $ PIPESTATUS болеесначала к другой переменной:
status=(${PIPESTATUS[@]})
Затем вы можете проверить их по отдельности, например,
if (( ${status[0]} )); then echo "main reactor core breach!"; exit 1;
elif (( ${status[1]} )); then echo "perls poisoned by toxic spill!"; exit 2;
fi;
Вы должны сделать это с помощью временной переменной, потому что следующий оператор, даже если это *Оператор 1016 * сбросит ${PIPESTATUS[@]}
до того, как следующий оператор, даже если это оператор elif
, сможет его проверить.
Обратите внимание, что этот материал работает только с bash, а не с исходной оболочкой bourne (обычно sh
, хотя многие системы связывают /bin/sh
с /bin/bash
из-за его обратной совместимости).Таким образом, если вы поместите это в сценарий оболочки, первая строка должна быть
#!/bin/bash
, а не #!/bin/sh
.