非対話型の非ログインシェルは、$BASH_ENVで指定されたスクリプトを取得しようとします。しかし、クローンジョブまたはスクリプトが特定のセッションに対して$ 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
。