¿Es posible redirigir todo el resultado de un script de Bourne shell a alguna parte, pero con comandos de shell dentro del script?¿Cómo redirecciono el resultado de un script de shell completo dentro del script?
Redirigir la salida de un solo comando es fácil, pero quiero algo más parecido a esto:
#!/bin/sh
if [ ! -t 0 ]; then
# redirect all of my output to a file here
fi
# rest of script...
Significado: si el script se ejecuta de forma no interactiva (por ejemplo, cron), guardar fuera de la salida de todo a un archivo. Si se ejecuta interactivamente desde un shell, deje que la salida pase a stdout como de costumbre.
Quiero hacer esto para un script normalmente ejecutado por la utilidad periódica de FreeBSD. Es parte de la ejecución diaria, que normalmente no me interesa ver todos los días en el correo electrónico, por lo que no la envío. Sin embargo, si algo dentro de este script en particular falla, eso es importante para mí y me gustaría poder capturar y enviar por correo electrónico el resultado de esta parte de los trabajos diarios.
Actualización: La respuesta de Joshua está en el lugar, pero yo también quería salvar y restaurar stdout y stderr alrededor de toda la secuencia de comandos, que se realiza de esta manera:
# save stdout and stderr to file descriptors 3 and 4, then redirect them to "foo"
exec 3>&1 4>&2 >foo 2>&1
# ...
# restore stdout and stderr
exec 1>&3 2>&4
Pruebas de $ plazo no es la mejor manera de probar para el modo interactivo. En su lugar, compruebe si stdin es un tty (test -t 0). –
En otras palabras: si [! -t 0]; luego exec> somefile 2> & 1; fi –
Vea aquí para obtener toda la bondad: [http://tldp.org/LDP/abs/html/io-redirection.html](http://tldp.org/LDP/abs/html/io-redirection.html) Básicamente lo que dijo Joshua. El archivo exec> redirige stdout a un archivo específico, exec
Loki