Tengo un trabajo cron que ejecuta un comando php como este:
php /path/to/script.php > dev/null
Esto debería enviar solo la salida STDERR a la dirección MAILTO. Por lo que deduzco, el script php no genera ninguna información STDERR incluso cuando su estado de salida es 1.
¿Cómo puedo obtener el resultado del comando php (STDOUT) y solo enviarlo a MAILTO si el estado de salida no es cero?
¿Has considerado crónico de moreutils ? Creo que hace exactamente lo que quieres:
En versiones recientes, hay un
-e
interruptor para mostrar también la salida completa si se ha escrito algo en stderr.fuente
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:
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:
Si potencialmente hay una gran cantidad de resultados, puede preferir almacenarlos en un archivo temporal en su lugar:
fuente