質問: stderrとstdoutの両方を/ bin / shで/ dev / nullにリダイレクトします stdoutとstderrの両方を/dev/nullにリダイレクトするためにあらゆる方法を試しましたが、成功しませんでした。私はほぼ一生bashを実行していて、この問題を一度も経験したことがありませんが、bsdの場合は/bin/shのままです。私が試したこと:if ls ./python* 2> /dev/null; then echo found python fi ...うまくいく; pythonが存在しない場合は、lsからのエラーメッセージがミュートされます。ただし、python.tgzが存在する場合は、次のような行が出力されます。# ./test.sh ./python-2.7.3p1.tgz 私はもう試した:if ls ./python* &> /dev/null; then echo found python fi そしてif ls ./python* 2>1 > /dev/null; then echo found python fi そしてif ls ./python* > /dev/null; then echo found python fi 実際には何も機能しません。同時に両方ではなく、1つの出力のみをリダイレクトできます。
回答: これは、posix互換シェルで機能します。ls good bad >/dev/null 2>&1 stdrに複製する前にstdoutfirstをリダイレクトする必要があります ;最初にそれを複製すると、stderrはstdoutが最初にポイントしたものをポイントするだけです。bash、zshおよび他のいくつかのシェルもショートカットを提供しますls good bad &>/dev/null これはコマンドラインでは便利ですが、移植を目的としたスクリプトでは避けてください。