最近、同僚が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.