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
.