非ログイン非対話式bash開始問題

非ログイン非対話式bash開始問題

bashのスタートアップファイルを学んでいますが、次のリンクが見つかりました。

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起動ファイルの詳細については、すべてのシナリオの完全な設定を参照してください。ここ

関連情報