今日、のドキュメントを読んでいたset
ところ、フラグ変数($-
)にヘルプページ(help set
)に記載されていないフラグが含まれていることに気付きました。GNU.org: しばらくして私i
は
このページこれはi
、相互の作用。
それから私が最初に試したのは、もちろん、それをオフにすることでした。
を実行した後set +i
、$-
には が含まれなくなりましi
たが、それ以外はすべて通常どおり動作しているようでした。
同様に、set -i
スクリプト ファイルを入れても、実行時に明らかな効果はありませんでした。
そこで質問ですが、スクリプトにset -i
/を入れたりset +i
、コマンド ラインで実行したりすると、$-
変数を変更する以外に実際に何か効果がありますか?
答え1
どうやら、シェルが初期化された後にコマンドラインでset -i
または を使用した場合の唯一の結果は、の値を変更することです。このオプションは、シェルを作成するために呼び出す場合にのみ意味のある使用が可能であり、その場合、シェルは対話型になります。set +i
$-
-i
bash
bash ソースを簡単に調べると、実行中の対話型チェックがグローバル変数 を参照していることがわかりますinteractive
。この変数は初期化シーケンス中に設定され、その後は変更されません。 と のみがset [+-]i
グローバル$-
を使用しますforced_interactive
。(が設定されている場合は が true に設定され、それ以外の場合は で説明されているように にinteractive
設定されます。)forced_interactive
man 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 マニュアル