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
これはコマンドラインでは便利ですが、移植を目的としたスクリプトでは避けてください。