Dado que el resultado se genera antes de que se conozca el estado de salida, deberá almacenarlo en algún lugar.
Una posibilidad es almacenarlo en una variable de shell:
output=$(php /path/to/script.php)
if [ $? -ne 0 ]; then
printf "%s\n" "$output"
fi
Esto no conserva completamente la salida del script (elimina las líneas en blanco finales), pero está bien para este caso de uso. Si desea conservar las líneas en blanco al final:
output=$(php /path/to/script.php; ret=$?; echo a; exit $ret)
if [ $? -ne 0 ]; then
printf "%s" "${output%a}"
fi
Si potencialmente hay una gran cantidad de resultados, puede preferir almacenarlos en un archivo temporal en su lugar:
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