bashのmanページ は、ログインシェルとインタラクティブシェルの概要を示しています。
ログインシェルは、引数ゼロの最初の文字が-であるシェル、または--loginオプションで開始されたシェルです。
対話型シェルは、非オプション引数なしで-cオプションなしで開始され、標準入力とエラーの両方が端末に接続されている(isatty(3)によって決定される)か、-iオプションで開始されます。 PS1が設定され、bashが対話型の場合は$-にiが含まれ、シェルスクリプトまたはスタートアップファイルでこの状態をテストできます。
これは、4種類のシェルを使用できることを意味します。
しかし、そもそもなぜインタラクティブ/非インタラクティブシェルとログイン/非ログインシェルがあるのでしょうか。なぜ変種なのか?シェルのタイプが1つだけの場合、何を失うでしょうか?
また、echo $-
を実行してログインシェルにいるかどうかを確認しようとすると、次のように出力されます。
himBH
これらのフラグの一部は説明されています ここ ですが、h
、H
、およびm
は説明されていません。これらすべてのフラグを説明する場所はありますか?
これらはシェルのさまざまな「タイプ」についての私の考えです-残念ながら、最初からUn * xの台頭を目撃していなかったので(この概念は歴史的にかなり拡大していると思います)、重要です。
/etc/profile
、~/.bash_login
など、正確なリストについてはマニュアルを参照)があります。~/.bash_logout
があります。~/.bashrc
から個人設定を読み取る必要があります。シェル-したがって、これはインタラクティブ、非ログインシェルです。bash
はできるだけ早く起動する必要があります。つまり、設定ファイルを読み取ってはいけません。これは非インタラクティブ、非ログインシェルです。だから、あなたの質問への私の答えシェルの種類が1つしかない場合、何が失われるでしょうか?は1つの単語にあります: "柔軟性"。
2番目の質問への答えは簡単です。
$-
は、現在のオプションセットをリストします。これらは、コマンドラインパラメータでbash
に設定するか、set
ビルトインを介して設定できます。したがって、マニュアルの2つの場所を確認する必要があります。
OPTIONS
セクション:
-i If the -i option is present, the Shell is interactive.
Shell BUILTIN COMMANDS
セクション、サブセクションset
:
-h Remember the location of commands as they are looked up for execution. This is enabled by default.
-m Monitor mode. Job control is enabled. This option is on by default for interactive shells on systems that sup‐
port it (see JOB CONTROL above). Background processes run in a separate process group and a line containing
their exit status is printed upon their completion.
-B The Shell performs brace expansion (see Brace Expansion above). This is on by default.
-H Enable ! style history substitution. This option is on by default when the Shell is interactive.