BASH_ENV y trabajos cron

Tengo varias preguntas relacionadas con shells no interactivos, sin inicio de session y trabajos cron.

Q1. He leído que los shells no interactivos que no inician session solo "cargan" $BASH_ENV . qué significa esto exactamente? ¿Significa que puedo apuntar $BASH_ENV a un file y que este file será de origen?

P2 : Suponiendo que tengo una input en cron apuntando a un script Bash con un shebang Bash, ¿qué variables de entorno y definiciones puedo asumir que mi script Bash esté cargado?

P3 : Si agrego SHELL=/bin/bash a la parte superior de mi crontab , ¿qué hace exactamente esto? ¿Significa eso?

  1. cron se ejecuta en Bash?
  2. Los commands especificados en crontab se interpretan en Bash?
  3. Los scripts que no tienen shebangs en ellos, se ejecutan bajo $SHELL

¿algo más?

P4 : ¿Cómo puedo configurar BASH_ENV para trabajos cron?

Para Q1 y Q2, mira aquí . Q3 se responde en la discusión de sus otras tres preguntas a continuación.

WRT $BASH_ENV , de man bash :

Cuando bash se inicia de forma no interactiva, para ejecutar un script de shell, por ejemplo, busca la variable BASH_ENV en el entorno, expande su valor si aparece allí, y usa el valor expandido como el nombre de un file para leer y ejecutar .

Así que esto podría ser un .profile tipo .profile . En cuanto a dónde o quién lo configuró, esto depende del context; generalmente no está establecido, pero podría haberlo hecho cualquier antecesor del process actual. cron no parece hacer un uso especial de esto, y AFAIK tampoco lo hace.

¿Significa que cron se ejecuta en Bash?

Si con "en" quiere decir, se inicia desde un shell, esto depende del sistema init, por ejemplo, SysV ejecuta scripts de shell para services, por lo que esos services siempre se inician a través de un shell.

Pero si con "en" quiere decir, "¿Es así un hijo de un process de concha?", No. Al igual que otros daemons, se ejecuta como el líder de su propio grupo de processs y su process principal es el process init (pid 1).

Sin embargo, las consecuencias para el entorno de cron son probablemente inmateriales. Para get más información sobre el entorno de los services de puesta en marcha, consulte la respuesta vinculada anteriormente con respecto a Q1 y Q2. WRT para cron específicamente, de acuerdo con man 5 crontab también establece algunas variables de entorno henetworkingadas por cualquier process que inicie ( $LOGNAME , $HOME y $SHELL ).

Los commands especificados en crontab se interpretan en Bash?

Se interpretan con sh o $SHELL ; de nuevo desde man 5 crontab :

Toda la porción de command de la línea, hasta una nueva línea o un carácter "%", será ejecutada por / bin / sh o por el shell especificado en la variable SHELL del file cron. Un carácter "%" en el command, a less que se escape con una barra invertida (), se cambiará a caracteres de línea nueva, y todos los datos posteriores al primer% se enviarán al command como input estándar.

La parte destacada de los aws Q3.

Los scripts que no tienen shebangs en ellos se ejecutan usando $ SHELL

Los scripts ejecutables con o sin shebangs son abiertos por $SHELL (o sh ). La diferencia es que aquellos con un shebang serán entregados al intérprete apropiado ( #!/bin/sh siendo otra instancia del shell), mientras que los scripts ejecutables (unos con el bit ejecutable establecido que son reference como ejecutables) sin un shebang simplemente fallará, tal como lo harían cuando se ejecuta desde la línea de command (a less que los ejecute sh script.sh ).