時には追加するのは本当に便利です。
set -x
実行前にすべてのコマンドを表示するには、スクリプトの上部に移動します。
良い出力を持つスクリプトを作成するには、1つの欠点があります。このように、スクリプトにテキスト出力を追加する方法がわかりません。私が使うなら
echo 'some comment'
これにより印刷が倍増します。
+ echo 'some comment'
some comment
試してみると#
全く出ません。
のように印刷されるコメントを追加するにはecho
?を使用するとどうなりますかset -x
?
答え1
賢いアプローチは、コメントをno-opコマンドの引数として記述することです。特に役に立つかもしれないものは次のとおりです。:
空のユーティリティ:
set -x
: Some interesting notes on the following are ...
結果:
+ : Some interesting notes on the following are...
コロンコマンドは、何も実行せず、ユーザーが提供するすべての引数を受け入れ、常に成功します。:
トレース出力の開始時に追加情報を取得できますが、これはおそらくユーザーの目的にとって大きな問題ではありません。
これが気に入らない場合、:
より悪い方法は偽のコマンドを使用することです。
set -x
seq 1 1
Some comment &>/dev/null
true
以下を出力します。
+ seq 1 1
1
+ Some comment
+ true
つまり、Some comment
シェルがラインを実行しようとすると、ラインはトレース出力として印刷されますが、結果のエラーメッセージはに送信されます/dev/null
。これはいくつかの明白な理由で迷惑なことですが。エラーset -e
。
どちらの場合も、あなたのコメントは通常の方法でシェルによって解析されるため、特に特殊文字がある場合はそれを引用する必要があり、トレース出力なので引用符が表示されます。
答え2
デバッグ情報を印刷するには、「set -x」を使用せずに、別のデバッグ機能を使用してください。
#!/bin/bash
DEBUG=1
debug() {
if [ $DEBUG == 1 ]
then
echo "DEBUG:" $@
fi
}
debug "foo bar"
スクリプトを実行すると、次のものが生成されます。
temeraire:ul jenny$ ./testdebug.sh
DEBUG: foo bar
割り当てをreadに変更すると、そのDEBUG=0
行は印刷されません。
答え3
スクリプトのデバッグに使用しましたが、set -x
解決策のみが見つかりました。@MichaelHomerが提案しました。それは利点を取る空のユーティリティ(別名。: ..some comment...)。
より効率的なソリューションに移行する準備ができたら、実際のロガーを使用してスクリプトを実装することをお勧めします。log4Bash
。
はい
#!/usr/bin/env bash
source log4bash.sh
log "This is regular log message... log and log_info do the same thing";
log_warning "Luke ... you turned off your targeting computer";
log_info "I have you now!";
log_success "You're all clear kid, now let's blow this thing and go home.";
log_error "One thing's for sure, we're all gonna be a lot thinner.";
# If you have figlet installed -- you'll see some big letters on the screen!
log_captains "What was in the captain's toilet?";
# If you have the "say" command (e.g. on a Mac)
log_speak "Resistance is futile";
結果:
答え4
:
何も行わないnullコマンドを使用できます。
: ::::::: your comment here
注:コメントにbash特殊文字を使用しないでください。それ以外の場合は(, $, !, [, ...
まだ解釈されます。
読みやすくするには、+
settingsを使用して希望の文字列に変更できますPS4
。たとえば、次のようになります。
PS4=": "; set -x