/bin/sh を使用して stderr と stdout を /dev/null にリダイレクトします。

/bin/sh を使用して stderr と stdout を /dev/null にリダイレクトします。

さまざまな方法でリダイレクトしようとしましたが、役に立ちませんでし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

これはコマンドラインでは便利ですが、移植可能なスクリプトでは避けてください。

おすすめ記事