![script bash no puede obtener la diferencia en $PS1 o $- cuando se ejecuta de forma interactiva o mediante cron](https://rvso.com/image/617241/script%20bash%20no%20puede%20obtener%20la%20diferencia%20en%20%24PS1%20o%20%24-%20cuando%20se%20ejecuta%20de%20forma%20interactiva%20o%20mediante%20cron.png)
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.