bashのスタートアップファイルを学んでいますが、次のリンクが見つかりました。
その後、リンクグラフの最後の四半期で、bashがログインではなく非対話型の場合は、環境変数BASH_ENVにenv変数を取得する必要があることがわかりました。テストファイルを作成し、BASH_ENV="/home/myusername を書きました。 /.bear.sh"
.bare.shの内容は次のとおりです。
var="the bare environment branch should be reached"
varを印刷するスクリプトを起動しました。
echo $var
ただし、スクリプトを起動した後、出力は記録されません。
私はそれが「ベア環境ポイントに到達しなければならない」と印刷すると予想しました。
ここで何が間違っている可能性がありますか?
答え1
非対話型、非ログインbash
シェルが次を探す場合BASH_ENV
その環境で、ファイルをインポートします。エクスポートしないと、BASH_ENV
シェル環境では見つかりません。
export BASH_ENV
これは、コールシェルに存在するか、次を使用する必要があることを意味します。
BASH_ENV=$BASH_ENV ./myscript.sh
スクリプトを起動するとき。
マニュアルの関連詩bash
:
たとえば、bashが非対話式で起動されたときにシェルスクリプトを実行するには、
BASH_ENV
環境内で変数を探し、その値が環境にある場合は展開し、拡張値をファイルとして読み込み実行します。 。 Bashは、次のコマンドが実行されたかのように動作します。if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi
ただし、変数値は
PATH
ファイル名の取得には使用されません。
つまり、簡単に言えば、BASH_ENV
対話型シェルで設定するだけでは十分ではなく、シェルスクリプト環境でも表示する必要があります。
答え2
非対話型シェル呼び出しのもう1つの例は、リモートシェルデーモン(通常はrshd
)による呼び出し、またはセキュリティシェルデーモンによる呼び出しですsshd
。先に引用した内容Bash スタートアップファイルマニュアル:
Bashがこのように非対話型で実行されていると判断した場合、~/.bashrcはコマンドを読み込み、実行します(ファイルが存在して読み取れる場合)。
この場合、~/.bashrc
次のもので十分です。
if [ -z "$POSIXLY_CORRECT" ]; then
[ -z "$BASH_ENV" ] && export BASH_ENV="$HOME/.bash_env"
source "$BASH_ENV"
fi
Bash起動ファイルの詳細については、すべてのシナリオの完全な設定を参照してください。ここ。