多くのコマンドが「静かな」オプションを提供するのはなぜですか?

多くのコマンドが「静かな」オプションを提供するのはなぜですか?

標準出力を空のファイルにリダイレクトして同じ結果を簡単に取得できますが、なぜ多くのコマンドがオプションを提供したり、-q出力を抑制したりするのですか?--quiet

答え1

  • シェルでは簡単にリダイレクトできますが、シェルコマンドラインを使用せずに他の言語でコマンドを実行するなど、他の状況では簡単ではありません。シェルでも:

    find . -type f -exec grep -q foo {} \; -printf '%s\n'
    

    すべて含まれているものを印刷してくださいfoo。にリダイレクトすると、出力が/dev/null失われます。 (つまり、追加のシェルを作成すること)に頼る必要があります。findgrep-exec sh -c 'exec grep foo "$1" > /dev/null' sh {} \;

  • grep -q fooタイピング時間が思ったより短いです。grep foo > /dev/null
  • 次にリダイレクトする/dev/nullということは、出力が記録され続けてから削除されることを意味します。これは、出力を書き込まない(および割り当てずに書き込む出力を準備する)よりも効率が悪くなります。
  • 追加の最適化を可能にします。たとえば、grepwithは出力が不要であることを-q知っているため、grep最初の一致を探すとすぐに終了します。の場合は、grep > /dev/nullまだすべての一致を見つけようとします。
  • 静かな必ずしも意味するわけではない静かな。一部のコマンドでは、これは次のことを意味します。詳細を減らします。(逆に-v|--verbose)。たとえば、aとamplayerがあります。一部のコマンドでは、を使用して詳細を3倍に減らすことができます。--quiet--really-quiet-qqq

答え2

画面にコメントを追加する必要があると感じたときにコマンドを出力することはできますが、通常は何も出力しません。すべてをnullにリダイレクトすると、出力を見る機会はありません。

答え3

これはコマンドによって異なりますが、-q出力も無効になります。これにより、シェルがstderrをstdout(&stderrと見ている)にコピーするのが簡単になります。cshtcsh

一部のプログラムは、ステータスメッセージのために複雑になりたくない他の意味のある出力がある可能性がある状況に「静かな」オプションを提供します。またはそれに対応する機能は、すべてのプログラム状態出力をミュートすることによって、-q例えば、または。targzip

答え4

上記のすべての良い応答とポイントに加えて、各フラグに反対のオプションを提供するのが最善です。したがって、-v冗長な表現が必要な場合には、-q冗談、沈黙、沈黙があってはなりません。 (しかし、これがこの議論の要点ではありません...)すべての短いオプションには長いオプションが必要-qです--quiet

私たちのビジネスのほとんどすべてと同様に、ソリューションや同じ結果を達成する方法はいくつかあります。所有も-qその一つです。

関連情報