tcshと他のシェル間の一貫性のないstderrリダイレクト

tcshと他のシェル間の一貫性のないstderrリダイレクト

tcshにリダイレクトの問題があります。

次のコマンドを検討してくださいvi --versionvi --xxx我々は、これがviこの--versionオプションをサポートするマシンにあると仮定します。このオプションは--xxx何の効果もありませんので、vim何かを表示する必要がありますstderr

これらの推論に基づいて、2> /dev/nullこれら2つのコマンドと組み合わせて使用​​すると、有効な場合は出力を提供し、誤った場合は出力を提供しないでください。

それからはいbash、zsh、ksh、dashで見たものです。

$ vi --xxx 2> /dev/null
$ vi --version 2> /dev/null
VIM - Vi IMproved 7.4 (2013 Aug 10, compiled Oct 20 2014 16:09:17)
...

しかし、tcshでこれを試してみると私に提供されます。出力なし存在する両方ケース。

$ vi --xxx 2> /dev/null
$ vi --version 2> /dev/null
(there is no output here)

ここで何が起こっているのでしょうか?私がstderr間違って方向を変えているのだろうか?

出力は次のとおりですtcsh --version

tcsh 6.18.01 (Astron) 2012-02-14 (i686-intel-linux) options wide,nls,dl,al,kan,rh,nd,color,filec

ベストアンサー1

これらの不一致は、実際に理由リストの最初の理由です。有害とみなされるcshプログラミング

それともstderrを捨ててstdoutを維持したい場合はどうすればよいですか?操作方法はとても簡単ですか?

cmd 2>/dev/null

Bourne シェルで作業します。 cshでは、次のような厳しい試みしかできません。

(cmd > /dev/tty) >& /dev/null

しかし、誰がstdoutが私のttyだと言ったのですか?だからこれは間違っています。この簡単な操作完了できませんcshから。

おすすめ記事