script bash no puede obtener la diferencia en $PS1 o $- cuando se ejecuta de forma interactiva o mediante cron

script bash no puede obtener la diferencia en $PS1 o $- cuando se ejecuta de forma interactiva o mediante cron

Quiero que mis scripts cron se ejecuten detalladamente cuando los ejecuta interactivamente un usuario del sistema (con fines de depuración, por ejemplo) y de forma silenciosa en caso contrario (para cron, ya que quiero recibir correos electrónicos si y solo si recibo errores).

He probado esto en mi script:

case "$-" in
*i*) echo "this shell is interactive" > /tmp/log;
*) echo "this shell isn't" > /tmp/log;
esac

pero incluso cuando se ejecuta de forma interactiva (/bin/bash /tmp/my_script.sh) siempre devuelve "este shell no es" y

echo $-

en el script de shell devuelve hB y no hiB.

yo también lo he probado

if [ -z $PS1 ]

Pensando que cron no tiene $PS1 configurado, pero una vez más, desde el mensaje, echo $PS1 devuelve esta variable e interactivamente en un script, no devuelve nada :/

Me gustaría saber por qué de forma interactiva (/bin/bash my_script.sh) esto no devuelve el valor i de $- ni el valor de $PS1.

¡Muchas gracias por su ayuda!

Respuesta1

Tú podríascomprobar si la entrada estándar es un tty.

Alternativamente, puede agregar una bandera a su secuencia de comandos diciéndole que esté en silencio o detallado en lugar de hacer que adivine.

Respuesta2

Puede configurar una variable de entorno en cron y verificarla.

Coloque THISISCRON=1 en una línea sola encima de la entrada cron.

Respuesta3

Los scripts Bash nunca tienen activada la opción interactiva. No son interactivos en todas partes.

información relacionada