非対話型ログインシェルは「~/.profile」または「$BASH_ENV」というファイルを実行しますか?

非対話型ログインシェルは「~/.profile」または「$BASH_ENV」というファイルを実行しますか?

~からバッシュマニュアル

対話型ログインシェルとして呼び出されるか、--loginを使用して呼び出されます。

Bashが対話型ログインシェルとして使用されるか、--loginオプションを持つ非対話型シェルまず、/ etc / profileファイル(ファイルが存在する場合)からコマンドを読み取り、実行します。ファイルを読み込んだら、~/.bash_profile、~/.bash_login、~/.profile を順番に探して、存在して読み取れる最初のファイルからコマンドを読み込んで実行します。この動作は、シェルの起動時に --noprofile オプションを使用して無効にできます。

対話型ログインシェルが終了するか、非対話型ログインシェルがシャットダウン組み込みコマンドを実行すると、Bashは〜/ .bash_logoutファイル(存在する場合)からコマンドを読み取り、実行します。

対話型の非ログインシェルとして呼び出される

...

非対話型通貨

バッシュが始まると非対話型たとえば、シェルスクリプトを実行するには、環境でBASH_ENV変数を見つけてその値が表示されたら拡張し、拡張値を読み取って実行するファイル名として使用します。 Bashは、次のコマンドが実行されたかのように動作します。

if [-n "$BASH_ENV"]; "$BASH_ENV";

ただし、PATH変数の値はファイル名を取得するためには使用されません。

前述のように、 --login オプションを使用して非対話型シェルを呼び出すと、Bash はログインシェルの起動ファイルからコマンドを読み込んで実行しようとします。

非対話型ログインシェルは、最初の状況または3番目の状況のいずれに属しますか?

最初のケース「対話型ログインシェルとして呼び出されるか、--loginを使用して呼び出されます」には、「--loginオプションを持つ非対話型シェル」シナリオが含まれているため、次のように推論しました。

  • 最初のケースは、対話型でも非対話型でも、ログインシェルです。

  • 3番目のケースは、非対話型の非ログシェルです。

私は正しいですか?

ありがとうございます。

答え1

いいえ、あなたは間違っています。 Bashは文書化されているとおりに機能します。

  • 最初の部分は、対話型ログインシェルだけでなく、フラグで始まる非対話型シェルにも適用されます--login
  • 3番目の部分は、非対話型ログインシェルを含む非対話型シェルに適用されます。いいえフラグから始めてください--login

シェルは、--loginフラグのないログインシェルです。 LinuxシステムでSSHを介して起動されたBashシェルを見ると、/proc/$$/cmdline次のように起動することがわかります-bash。先行ハイフンはログインシェルを起動する一般的な方法であり、非対話型で終わる場合は最初の部分には含まれません。 。ただし、何らかの理由で人々が非対話型ログインシェルを望む場合は、通常これを使用して--loginこれを取得します。

関連情報