$BASH_ENV の可用性を保証する方法

$BASH_ENV の可用性を保証する方法

非対話型、非ログイン シェルは、$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

関連情報