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

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

非対話型の非ログインシェルは、$BASH_ENVで指定されたスクリプトを取得しようとします。しかし、クローンジョブまたはスクリプトが特定のセッションに対して$ BASH_ENVを設定する前に$ BASH_ENVが設定されていることをどのように確認できますか? Bashをコンパイルする唯一のオプションはハードコーディングですか?

答え1

crontabのすべてのbashスクリプトをロードするには、BASH_ENVcrontabレベルで設定してください。

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

BASH_ENV特定の項目にのみ設定するには、その項目で設定してください。そうすれば、BASH_ENVcrontab自体にリストされているコードには設定されませんが、とにかく複雑なものを入れることはお勧めできません。

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

関連情報