機能パラメータによるポンプコマンド出力

機能パラメータによるポンプコマンド出力

私のスクリプトには、次の非常に単純な機能があります。

# Used for debug tracing.
log()
{
    :
    echo "log: $1"
}

一箇所でロギングをカスタマイズ/解除できるというアイデアです。とても荒いです。

これで、リリース設定でスクリプトがまったく出力を生成しないようにします。私が考えた唯一の解決策ですが、非常に乾燥していません。

TMPFILE='/tmp/tempfilewithpossiblyuniquename'
cmd 1>"$TMPFILE" 2>"$TMPFILE"
cat "$TMPFILE" | xargs log
rm "$TMPFILE"

~のためすべてのコマンド。これを改善する方法は?


編集:収集したいみんなに出力してstdoutからstderr起動しますlog()。その後、log()すべてを無視したり、ファイルに書き込んだり、印刷したりするなどのジョブを選択できます。

ベストアンサー1

$1まず、この関数は送信されたすべての項目の最初の「単語」のみを記録します"$*"

第二に、この種のタスクを実行する方法は数え切れないほどです(POSIXの場合はしばしばそうです)。次のものを選択できます。

log() {
    cat - >> "$logfile"
}

do_stuff | log

ただし、次のこともできます。

(
    do_stuff
    do_more_stuff
) >> "$logfile"

./thing 1> /dev/null 2> &1すべての出力を完全に抑制する場合は、通常、以前のように「コードで」ロックするよりも、呼び出し環境(たとえば)に委ねる方が良いです。その意味は:

squashout="true"  # comment this out to stop killing output
if ! [[ "true" = "${squashout-false}" ]]; then 
  # Redirect stdout and stderr to the null device.  
  exec 1> /dev/null
  exec 2> /dev/null
fi

おすすめ記事