Cómo garantizar la disponibilidad de $BASH_ENV

Cómo garantizar la disponibilidad de $BASH_ENV

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

Respuesta1

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

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

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

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

Respuesta2

BASH_ENVsólo se lee en unno interactivoshell, y solo si ese shell es bash (y tampoco se llama con 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 existe 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.

información relacionada