Поскольку выходные данные генерируются до того, как станет известен статус выхода, вам придется их где-то хранить.
Одна возможность - сохранить его в переменной оболочки:
output=$(php /path/to/script.php)
if [ $? -ne 0 ]; then
printf "%s\n" "$output"
fi
Это не полностью сохраняет вывод скрипта (он удаляет завершающие пустые строки), но это нормально для этого варианта использования. Если вы хотите сохранить конечные пустые строки:
output=$(php /path/to/script.php; ret=$?; echo a; exit $ret)
if [ $? -ne 0 ]; then
printf "%s" "${output%a}"
fi
Если есть много информации, вы можете вместо этого сохранить ее во временном файле:
output_file=$(mktemp /var/tmp/script.XXXXXXXXXX.out)
php /path/to/script.php >>"$output_file"
ret=$?
if [ $ret -ne 0 ]; then
echo "script.php failed (status $ret), see the output in $output_file"
fi