`set`にbashオプションをリストする情報

`set`にbashオプションをリストする情報

コマンドを使用してコンソール設定を印刷すると、デフォルトで出力がecho $-設定されます。himBHsただし、スクリプトファイルで同じコマンドを実行するとhB

root@root:~# echo $-
himBHs
root@root:~# ./abc.sh 
hB
root@root:~#

私が知りたいのは、/bin/bash環境でスクリプトを実行しても同じ設定が適用されないのはなぜですか?

たとえば、次のコマンドを使用して新しいサブシェルプロセスを開始した場合/bin/bash コンソールから設定を一覧表示すると出力が表示されますhimBHs

root@root:~# /bin/bash
root@root:~# echo $-
himBHs

内部で同じプロセスを実行しようとするとシェルファイル、私が得る出力は「HB」。

root@root:~# ./abc.sh 
hB

Shebangを使用または使用せずに同じプロセスを試みましたが、スクリプトファイルの存在または実行はbash script_file同じ結果()を表示します。./script_filehB

私は何を見逃していますか?

ベストアンサー1

スクリプトを実行すると、親シェル(コマンドを実行するシェル)はスクリプトを実行するために非対話型シェルを起動します。このシェルでは対話型フラグが無効になり、2つのオプションのみがオンになっていiます。

  • -h実行するコマンドを見つけるとき(ハッシュ)コマンドを見つけて覚えておいてください。
  • -Bシェルが中括弧拡張を実行できるようにする

set出力に表示される完全なオプションのリストを表示できます$-組み込みコレクション

-iシェルが対話型モードで実行されるように指示する対話型シェルで使用できる追加オプション

  • -mジョブ制御を許可
  • -H!スタイル履歴置換の有効化

おすすめ記事