Comment garantir la disponibilité de $ BASH_ENV

Un shell non-interactif, non-connecté essaiera de générer n'importe quel script spécifié dans $ BASH_ENV. Mais comment puis-je garantir que $ BASH_ENV est défini avant qu'un travail ou un script cron ait une chance de définir $ BASH_ENV pour une session particulière? La seule option pour comstackr Bash est-elle codée en dur?

Si vous voulez que tous les scripts bash de votre crontab chargent BASH_ENV , configurez-le au niveau crontab.

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

Si vous souhaitez définir BASH_ENV uniquement pour une input particulière, définissez-la là. Alors BASH_ENV ne sera pas défini pour le code listé dans le crontab lui-même, mais c'est une mauvaise idée de mettre quoi que ce soit de complexe de toute façon.

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

Si vous souhaitez qu'un script particulier charge toujours un file de configuration, chargez-le directement depuis le script.

 #!/bin/bash . /path/to/configuration.bash … 

BASH_ENV est seulement lu dans un shell non interactif , et seulement si ce shell est bash (et non appelé sous le nom sh ). Un shell interactif non-connection ne search pas $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 

Il n'y a pas de file standard exécuté dans un shell non interactif pour l'user. Vous devriez le mettre dans le file séparé puis le source:

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

Ou vous pouvez le définir dans un file de configuration à l'échelle du système comme /etc/environment ou /etc/bashrc.bashrc .