set -x
シェルでスクリプトを実行してから実行すると、オプションセットはset -x
スクリプト内に影響を与えません。
すべてのシェルオプションがスクリプトによって継承されているわけではありません。
bashのマニュアルに記載されている内容が見つかりませんでした。私が見つけた唯一の関連は、「特に明記しない限り、これらの値はシェルから継承されます」だからシェルオプションが継承されているようです。私はマニュアルで何かを逃しましたか?
私が読んで関連質問スクリプトがシェルオプションを継承する方法を尋ねます。どうやってなぜ、なぜなのか気になります。
ありがとうございます。
組み込み関数やシェル関数ではなく単純なコマンドを実行したい場合は、次のように構成された別の実行環境で呼び出されます。特に明記しない限り、これらの値はシェルから継承されます。
•シェル用のファイルを開き、コマンドにリダイレクトして、指定されたすべての変更と追加を開きます。
• 現在の作業ディレクトリ
• ファイル生成モードマスク
•エクスポート用にマークされたシェル変数と関数、およびコマンド用にエクスポートされた変数は環境に渡されます(37ページの3.7.4節「環境」セクションを参照)。
•シェルが捕捉したトラップは、シェルの親から継承された値にリセットされ、シェルが無視したトラップは無視されます。この別の環境で呼び出されるコマンドは、シェルの実行環境に影響を与えることはできません。
ベストアンサー1
の場合は環境bash
によって異なります。$SHELLOPTS
bash-4.4$ export SHELLOPTS
bash-4.4$ set -x
bash-4.4$ bash -c 'echo x'
+ bash -c 'echo x'
+ echo x
x
bash -c 'echo x'
このオプションを継承する方法を確認してくださいxtrace
。shopt
と同じですが、設定されるオプションの$BASHOPTS
変数があります。
xtrace
bash
これは、スクリプト(またはスクリプトを実行するすべてのコマンドbash
)とbash
再帰的に呼び出すことができる他のすべてのスクリプトxtrace
(そのスクリプトで何も実行されないと仮定set +x
)を実行したい場合にデバッグオプションとして特に便利です。そうであれば、sh
他の言語で作成したときと同じように、bash
彼らにも影響を与えます。system("command line")
env SHELLOPTS=xtrace some-command