Bash: `set -i` を実行するとどのような効果がありますか?

Bash: `set -i` を実行するとどのような効果がありますか?

今日、のドキュメントを読んでいたsetところ、フラグ変数($-)にヘルプページ(help set)に記載されていないフラグが含まれていることに気付きました。GNU.org: しばらくして私i
このページこれはi相互の作用
それから私が最初に試したのは、もちろん、それをオフにすることでした。
を実行した後set +i$-には が含まれなくなりましiたが、それ以外はすべて通常どおり動作しているようでした。
同様に、set -iスクリプト ファイルを入れても、実行時に明らかな効果はありませんでした。

そこで質問ですが、スクリプトにset -i/を入れたりset +i、コマンド ラインで実行したりすると、$-変数を変更する以外に実際に何か効果がありますか?

答え1

どうやら、シェルが初期化された後にコマンドラインでset -iまたは を使用した場合の唯一の結果は、の値を変更することです。このオプションは、シェルを作成するために呼び出す場合にのみ意味のある使用が可能であり、その場合、シェルは対話型になります。set +i$--ibash

bash ソースを簡単に調べると、実行中の対話型チェックがグローバル変数 を参照していることがわかりますinteractive。この変数は初期化シーケンス中に設定され、その後は変更されません。 と のみがset [+-]iグローバル$-を使用しますforced_interactive。(が設定されている場合は が true に設定され、それ以外の場合は で説明されているように にinteractive設定されます。)forced_interactiveman bash

答え2

bash-1.14.7-14 のマニュアル ページに -i オプションに関するドキュメントがあります。 バグ報告

   -i        If the -i option is present, the shell is interactive.

対話型シェルは、tty 上のユーザー入力からコマンドを読み取ります。特に、このようなシェルは起動時にスタートアップ ファイルを読み取り、プロンプトを表示し、デフォルトでジョブ制御を有効にします。ユーザーはシェルと対話できます。スクリプトを実行するシェルは常に非対話型シェルです。

詳細はこちら:

http://www.tldp.org/LDP/abs/html/intandnonint.html https://unix.stackexchange.com/questions/43385/interactive-shell とはどういう意味ですか?

追加: その他のリンク

非ログインシェルについての本当に良い答え

https://askubuntu.com/questions/247738/why-is-etc-profile-not-invoked-for-non-login-shells

対話型シェルに関する bash マニュアル

http://www.gnu.org/software/bash/manual/html_node/Interactive-Shell-Behavior.html#Interactive-Shell-Behavior

関連情報