さまざまな方法でリダイレクトしようとしましたが、役に立ちませんでしstdout
た。私は生涯の間bashを使用してきましたが、このような問題を経験したことはありませんが、BSDでは停止しました。stderr
/dev/null
/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つだけをリダイレクトでき、同時に両方をリダイレクトすることはできません。
答え1
これはすべてのPOSIX互換シェルで機能します。
ls good bad >/dev/null 2>&1
あなたはする必要があります標準出力リダイレクト最初stderrにコピーする前に;最初にコピーすると、stderrはstdoutが元のポイントを指します。
吹く、zsh、および他のいくつかのシェルもショートカットを提供します。
ls good bad &>/dev/null
これはコマンドラインでは便利ですが、移植可能なスクリプトでは避けてください。