/dev/nullで記述子を使用するのはなぜですか?

/dev/nullで記述子を使用するのはなぜですか?

私は理解できません。いくつかのチュートリアルでは、人々がこのような記述子を使用するのを見ました(出力とエラー用)。

command 1> /dev/null
command 2> /dev/null

しかし、なぜこのようなことをするのでしょうか?画面やファイルでは出力を見ることはできません。消えたばかりです。コマンドなどをテストしますか?

ベストアンサー1

時には出力を見たくない場合もあります。多くのツールはstdoutまたはstderrで「無駄な」コンテンツをたくさん印刷し、時にはツールが出力をリダイレクトするような-q/--quite機能をサポートしていない場合は無視したい場合があります。/dev/nullツールの主な機能が何かを印刷するものではない場合、成功または失敗にのみ興味がある可能性があり、それに戻りコードを使用します(特にスクリプトでは)。

たとえば、特定のツールがインストールされていることを確認したいとします。tool --versionあるいは、同じことを確認したいかもしれませんが、which toolツールのバージョンやパスにはあまり興味がなく、ツールが利用可能で戻りコードだけで十分です。たとえば、ユーザーに必要なすべての依存関係があることを確認したいスクリプトで

$ which xyz >/dev/null 2>&1 || echo "you need to install xyz to proceed"
you need to install xyz to proceed

より良く見える

$ which xyz || echo "you need to install xyz to proceed"
/usr/bin/which: no xyz in (/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/home/vtrefny/.local/bin:/home/vtrefny/bin)
you need to install xyz to proceed

おすすめ記事