help set
と入力して、シェルの組み込みコマンドセットを調べたところ、構文の簡単な説明は次のようになっています。
set [-abefhkmnptuvxBCHP] [-o option-name] [-] [arg ...]
ヘルプドキュメントでは、変数$-がsetコマンドで設定された現在のすべてのパラメーターを保持していると説明しています。
だから、私はecho $-
を実行してシェルのすべてのパラメーター設定を表示しました。
himBH
すべての文字はドキュメントと上記の短い構文の説明の中で言及されていますが、1つ欠けています:iオプション。 i
set
パラメータはbashで何を意味しますか?
i
は、シェルがインタラクティブであることを意味します。
これについては、シェルがインタラクティブである状況について manpageセクション で説明しています。
対話型シェルは、オプション以外の引数なしで開始され、標準入力とエラーの両方が端末に接続されている_
-c
_オプションなしで開始されるシェル(isatty(3)
によって決定される)、または_-i
_オプション。 _PS1
_が設定され、i
がインタラクティブな場合は_$-
_にbash
が含まれ、シェルスクリプトまたは起動ファイルでこの状態をテストできます。
シェルのインタラクティブな性質は初期化中に決定され、その効果はシェルの存続期間中に変化しません。これが、set
がi
を変更可能なフラグとして報告しない理由です。 Bashのバージョン4.3では、_set -i
_または_set +i
_が受け入れられますが、_forced_interactive
_フラグを内部で変更する以外の効果はありません(このフラグは初期化中にのみ読み取られます)。バージョン4.4では、エラーメッセージが表示されます。フラグ処理の詳細は、Bashソースコードの _flags.c
_ で確認できます。