Cómo garantizar la disponibilidad de $ BASH_ENV

8

Un shell no interactivo y sin inicio de sesión intentará obtener cualquier script especificado en $ BASH_ENV. Pero, ¿cómo puedo garantizar que $ BASH_ENV esté configurado antes de que un trabajo cron o script tenga la oportunidad de establecer $ BASH_ENV para una sesión en particular? ¿Es la única opción para compilar Bash con él codificado?

Igorio
fuente
Echa un vistazo pam_env. O simplemente fuente $HOME/.enven todos sus scripts.
Mikel

Respuestas:

7

Si desea que se carguen todos los scripts de bash en su crontab BASH_ENV, configúrelo en el nivel crontab.

BASH_ENV=/path/to/startup.bash
12 34 * * * /path/to/bash_script
1 23 1 * * /path/to/other_bash_script

Si desea establecer BASH_ENVsolo una entrada en particular, configúrela allí. Entonces BASH_ENVno se establecerá para el código que figura en el crontab, pero es una mala idea poner algo complejo allí de todos modos.

12 34 * * * export BASH_ENV=/path/to/startup.bash; /path/to/bash_script
1 23 1 * * /path/to/other_bash_script

Si desea que un script en particular cargue siempre algún archivo de configuración, cárguelo directamente desde el script.

#!/bin/bash
. /path/to/configuration.bash
Gilles 'SO- deja de ser malvado'
fuente
¿Por qué te molestas exporting $BASH_ENVsi sólo se está configurando para un solo proceso? Simplemente BASH_ENV=/path/to/startup.bash /path/to/bash_scriptes la forma sensata de hacerlo.
mikeserv
4

BASH_ENVsolo se lee en un shell no interactivo , y solo si ese shell es bash (y tampoco se llama bajo el nombre sh). Un shell interactivo sin inicio de sesión no busca $BASH_ENV:

$ export BASH_ENV=/home/cuonglm/bash-env.sh
$ bash -lci '. test.sh'
QWERTY
$ bash -lc '. test.sh'
BASH_ENV read
QWERTY
$ bash -ci '. test.sh'
QWERTY
$ bash -c '. test.sh'
BASH_ENV read
QWERTY

No hay ningún archivo estándar que se ejecute en un shell no interactivo para el usuario. Debe configurarlo en un archivo separado y luego obtenerlo:

bash -c '. ~/.profile; echo 123'

O puede configurarlo en algún archivo de configuración de todo el sistema como /etc/environmento /etc/bashrc.bashrc.

Cuonglm
fuente
Tenía la esperanza de que / etc / environment funcionaría, pero por lo que puedo ver, no es fuente de shells en Mac OS 10.6. /etc/bashrc.bashrc suena intrigante, pero tengo dificultades para rastrear cualquier información al respecto. ¿O es un error tipográfico?
Igorio