非対話型、非ログイン シェルは、$BASH_ENV で指定されたスクリプトをソースしようとします。しかし、cron ジョブまたはスクリプトが特定のセッションに対して $BASH_ENV を設定する前に、$BASH_ENV が設定されることをどのように保証するのでしょうか。ハードコードされた状態で Bash をコンパイルする唯一のオプションですか。
答え1
crontab 内のすべての bash スクリプトをロードしたい場合はBASH_ENV
、crontab レベルで設定します。
BASH_ENV=/path/to/startup.bash
12 34 * * * /path/to/bash_script
1 23 1 * * /path/to/other_bash_script
BASH_ENV
特定のエントリのみに設定したい場合は、そこに設定します。そうするとBASH_ENV
、crontab 自体にリストされているコードには設定されなくなりますが、いずれにしてもそこに複雑なものを置くのは得策ではありません。
12 34 * * * export BASH_ENV=/path/to/startup.bash; /path/to/bash_script
1 23 1 * * /path/to/other_bash_script
特定のスクリプトで常に何らかの構成ファイルを読み込むようにしたい場合は、スクリプト内から直接読み込みます。
#!/bin/bash
. /path/to/configuration.bash
…
答え2
BASH_ENV
は、非インタラクティブシェルであり、そのシェルが bash の場合のみ (また、 という名前で呼び出されていない場合sh
) です。非ログインの対話型シェルは を検索しません$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
ユーザー向けの非対話型シェルで実行される標準ファイルはありません。別のファイルに設定してソースする必要があります。
bash -c '. ~/.profile; echo 123'
/etc/environment
または、や のようなシステム全体の設定ファイルで設定することもできます/etc/bashrc.bashrc
。