web-dev-qa-db-ja.com

bashシェルのsetコマンドのパラメーター「i」とは何ですか?

help setと入力して、シェルの組み込みコマンドセットを調べたところ、構文の簡単な説明は次のようになっています。

set [-abefhkmnptuvxBCHP] [-o option-name] [-] [arg ...]

ヘルプドキュメントでは、変数$-がsetコマンドで設定された現在のすべてのパラメーターを保持していると説明しています。

だから、私はecho $-を実行してシェルのすべてのパラメーター設定を表示しました。

himBH

すべての文字はドキュメントと上記の短い構文の説明の中で言及されていますが、1つ欠けています:iオプション。 isetパラメータはbashで何を意味しますか?

6
sharkant

iは、シェルがインタラクティブであることを意味します。

これについては、シェルがインタラクティブである状況について manpageセクション で説明しています。

対話型シェルは、オプション以外の引数なしで開始され、標準入力とエラーの両方が端末に接続されている_-c_オプションなしで開始されるシェル(isatty(3)によって決定される)、または_-i_オプション。 _PS1_が設定され、iがインタラクティブな場合は_$-_にbashが含まれ、シェルスクリプトまたは起動ファイルでこの状態をテストできます。

シェルのインタラクティブな性質は初期化中に決定され、その効果はシェルの存続期間中に変化しません。これが、setiを変更可能なフラグとして報告しない理由です。 Bashのバージョン4.3では、_set -i_または_set +i_が受け入れられますが、_forced_interactive_フラグを内部で変更する以外の効果はありません(このフラグは初期化中にのみ読み取られます)。バージョン4.4では、エラーメッセージが表示されます。フラグ処理の詳細は、Bashソースコードの _flags.c_ で確認できます。

10
Stephen Kitt