GNU/Linux >> Linux の 問題 >  >> Linux

set -x は何をしますか?

set -x

<ブロック引用>

コマンド、case コマンド、select コマンド、およびコマンドとその引数または関連する単語リストの算術演算の単純なコマンドのトレースを、展開後および実行前に出力します。 PS4 変数の値が展開され、結果の値がコマンドとその展開された引数の前に出力されます。

[ソース]

set -x
echo `expr 10 + 20 `
+ expr 10 + 20
+ echo 30
30
set +x
echo `expr 10 + 20 `
30

上記の例は set -x の使用法を示しています .使用すると、上記の演算式が展開されます。 1 行がどのように段階的に評価されたかを確認できました。

  • 最初のステップ expr が評価されました。
  • 2 番目のステップ echo が評価されました。

set の詳細については、こちらのリンクをご覧ください

シェル スクリプトに関しては、

[ "$DEBUG" == 'true' ] && set -x

実行モードが DEBUG として選択されている場合、スクリプトは追加の情報行を出力していた可能性があります。 .伝統的に、スクリプトが -d などのオプションの引数で呼び出されたときに、デバッグ モードを有効にしていました。


<ブロック引用>

-u:デフォルトでは無効です。有効にすると、未構成の変数を使用するとエラー メッセージが表示されます。

-v:デフォルトでは非アクティブです。アクティベーション後、情報が出力される前に、情報の元のコンテンツが (可変解像度なしで) 表示されます。

-x:デフォルトでは非アクティブです。有効にすると、コマンドの実行前にコマンドの内容が表示されます (変数の解決後、++ 記号があります)。

次の違いを比較してください:

/ # set -v && echo $HOME
/root
/ # set +v && echo $HOME
set +v && echo $HOME
/root

/ # set -x && echo $HOME
+ echo /root
/root
/ # set +x && echo $HOME
+ set +x
/root

/ # set -u && echo $NOSET
/bin/sh: NOSET: parameter not set
/ # set +u && echo $NOSET

set -x 実行されたすべてのコマンドが端末に出力されるシェルのモードを有効にします。あなたの場合、それは明らかにデバッグに使用されています。これは set -x の典型的な使用例です :実行されるすべてのコマンドを出力すると、スクリプトが期待どおりに機能しない場合に、スクリプトの制御フローを視覚化するのに役立つ場合があります。

set +x


Linux
  1. 「–」(二点鎖線)とはどういう意味ですか?

  2. 何をしますか?

  3. Korn Shellの「set-f」は何をしますか?

  1. Exec 3とは何ですか?

  2. Libgl_always_indirect =1は実際に何をしますか?

  3. malloc(0) は何を返しますか?

  1. 「cd -」は何の略ですか?

  2. 「bash -c」は何をしますか?

  3. set -m が何をするのか、誰かが詳細に説明できますか?