เนื่องจากเอาต์พุตถูกสร้างขึ้นก่อนที่จะทราบสถานะการออกคุณจะต้องเก็บไว้ที่ใดที่หนึ่ง
ความเป็นไปได้อย่างหนึ่งคือเก็บไว้ในตัวแปรเชลล์:
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