標準出力を空のファイルにリダイレクトして同じ結果を簡単に取得できますが、なぜ多くのコマンドがオプションを提供したり、-q
出力を抑制したりするのですか?--quiet
答え1
シェルでは簡単にリダイレクトできますが、シェルコマンドラインを使用せずに他の言語でコマンドを実行するなど、他の状況では簡単ではありません。シェルでも:
find . -type f -exec grep -q foo {} \; -printf '%s\n'
すべて含まれているものを印刷してください
foo
。にリダイレクトすると、出力が/dev/null
失われます。 (つまり、追加のシェルを作成すること)に頼る必要があります。find
grep
-exec sh -c 'exec grep foo "$1" > /dev/null' sh {} \;
grep -q foo
タイピング時間が思ったより短いです。grep foo > /dev/null
- 次にリダイレクトする
/dev/null
ということは、出力が記録され続けてから削除されることを意味します。これは、出力を書き込まない(および割り当てずに書き込む出力を準備する)よりも効率が悪くなります。 - 追加の最適化を可能にします。たとえば、
grep
withは出力が不要であることを-q
知っているため、grep
最初の一致を探すとすぐに終了します。の場合は、grep > /dev/null
まだすべての一致を見つけようとします。 - 静かな必ずしも意味するわけではない静かな。一部のコマンドでは、これは次のことを意味します。詳細を減らします。(逆に
-v|--verbose
)。たとえば、aとamplayer
があります。一部のコマンドでは、を使用して詳細を3倍に減らすことができます。--quiet
--really-quiet
-qqq
答え2
画面にコメントを追加する必要があると感じたときにコマンドを出力することはできますが、通常は何も出力しません。すべてをnullにリダイレクトすると、出力を見る機会はありません。
答え3
これはコマンドによって異なりますが、-q
出力も無効になります。これにより、シェルがstderrをstdout(&stderr
と見ている)にコピーするのが簡単になります。csh
tcsh
一部のプログラムは、ステータスメッセージのために複雑になりたくない他の意味のある出力がある可能性がある状況に「静かな」オプションを提供します。またはそれに対応する機能は、すべてのプログラム状態出力をミュートすることによって、-q
例えば、または。tar
gzip
答え4
上記のすべての良い応答とポイントに加えて、各フラグに反対のオプションを提供するのが最善です。したがって、-v
冗長な表現が必要な場合には、-q
冗談、沈黙、沈黙があってはなりません。 (しかし、これがこの議論の要点ではありません...)すべての短いオプションには長いオプションが必要-q
です--quiet
。
私たちのビジネスのほとんどすべてと同様に、ソリューションや同じ結果を達成する方法はいくつかあります。所有も-q
その一つです。