1

スクリプトを作成する過程で、コマンドの出力をさまざまな方法で、さまざまな程度で使用します。これは、目の前のタスクのトラブルシューティングを行うためです..たとえば、このスニペットでは、アプリケーションのアイコン リソースを読み取り、典型的な .icns 拡張子ではありません...

icns=`defaults read /$application/Contents/Info CFBundleIconFile`
    if ! [[ $icns =~ ^(.*)(.icns)$ ]]; then
        echo -e $icns "is NOT OK YOU IDIOT!  **** You need to add .icns to "$icns"."
    else 
        echo -e $icns "\t Homey, it's cool.  That shits got its .icns, proper."
    fi

必然的に、各バグが潰され、stdout実際の機能とデバッグ プロセスに関連する開始点が増えるにつれて、このフィードバックは通常、コメント アウトされるか、沈黙するか、または削除されます。これには明らかな理由があります。

ただし、実行時に「この種の」メッセージの一部またはすべてをオプションで表示するか、またはオプションで表示しないように、ハードコードされているか、パラメーターとして渡された単純なオプションを提供したい場合、その単純な機能を提供する最良の方法は何ですか? 基本的に機能を複製しようとしてset -xいますが、行ごとのランダウンの代わりに、具体的に設計した通知のみを出力します。

echoeach and everyをifa をチェックするに置き換えるのは過剰に思えますが、 /スキームを実装するdebug=1|0方法の簡潔な説明を見つけることができませんでした(どちらが組み込みであるかを思い出せません) など。独自のスクリプト。この小さな式は有望に思えましたが、re: に関するドキュメントはほとんどありません(ただし、これがこのパズルの鍵であると確信しています)。getoptsgetopt2>$1

[ $DBG ] && DEBUG="" || DEBUG='</dev/null'
check_errs() {
    # Parameter 1 is the return code Para. 2 is text to display on failure.
    if [ "${1}" -ne "0" ]; then
        echo "ERROR # ${1} : ${2}"
    else
        echo "SUCESSS  "
    fi }

この取引に対する簡潔で再利用可能なトリックは歓迎されます。ボートを完全に見逃している場合、またはそれがヘビであり、噛まれていた場合は、お詫び申し上げます.

4

2 に答える 2

1

簡単なトリックの 1 つは、単に「ロギング」エコー コマンドを変数に置き換えることです。つまり、

TRACE=:
if test "$1" = "-v"; then
    TRACE=echo
    shift
fi

$TRACE "You passed the -v option"

必要に応じて、さまざまな種類のメッセージに対してこれらをいくつでも持つことができます。

于 2011-07-31T03:02:04.597 に答える
0

bash をサポートする一般的なオープン ソース トレース ライブラリを確認できます。

WKR

アルノカン ウストゥエンスエズ

于 2013-09-27T17:14:29.790 に答える