最近、同僚がbash -xを紹介して、bashスクリプトを取得せずにデバッグしました。 echo $fooルート。
$ bash -x hello-world.sh + echo "Hello World" Hello World
内部的に-bashはこれをどのように達成しますか? man bashを確認したところ、インタプリタを呼び出すときに-xフラグが表示されていました(そうではありませんでしたか?)。主に探しています。 -x環境またはその他の落とし穴でデバッグされるものとされないものの概要。
回答
-xは、-oでxtraceを設定するのと同じです。 bashのdiv>オプション。bashマンページのコピーから:
各単純なコマンドを展開した後、 for コマンド、 case コマンド、 select コマンド、または
コマンドで、 PS4 の展開値を表示し、その後にコマンドとその展開引数を表示しますtsまたは関連する単語リスト。
これには多くの「落とし穴」はないと思います。実行する各コマンドを出力します。シェルスクリプトからのstderr出力を解析している場合、コマンドがstderrに出力されるため、これが混乱する可能性があると思います。 (別名ファイル記述子2)、しかしそれは極端なケースのようです。
(スクリプト内またはset -xを使用したインタラクティブシェルセッションでこれを条件付きで有効にすることもできます。オンにし、set +xでオフにします。)
コメント
と書かれています。
set helpは-x Print commands and their arguments as they are executed.とだけ言っています。'方法について何も見つかりませんでした現在のシェルで設定を解除します。set helpは位置パラメータをhelpであり、'は何も出力しません。help setは、、およびtそのリストの最後には、
Using + rather than - causes these flags to be turned off.