web-dev-qa-db-ja.com

stderrリダイレクトがcshで機能しない

次のコマンドを実行します。

pkg_add emacs-23.4,2.tbz 2> output.log

出力は引き続きターミナルに表示されます。押すと 、私は得る

pkg_add emacs-23.4,2.tbz 2 > output.log

2の前にスペースを入れます。

私はもともとこれを入れませんでした。やってみる

pkg_add emacs-23.4,2.tbz > output.log 2>&1

繰り返しますが、 スペースが追加されました

なぜこれが私に起こったのですか?

FreeBSDでcshを実行しています。

11
gadgetmo

2>リダイレクトは、cshまたはtcshでは機能しません。

chshコマンドを使用して、シェルを/ bin/shまたは/ usr/local/bin/bashに変更し、2>スタイルのリダイレクトを使用します。 注:ルートのシェルを/ usr/local/bin/bashに変更しないでください

cshとtcshは標準出力とエラーを個別にリダイレクトできませんが、>&は結合された出力をファイルにリダイレクトします。

12
Craig

あなたがSTDERRを隠そうとしているのか、それをSTDOUTにリダイレクトしようとしているのかわかりません。

STDOUTをファイルにリダイレクトするには:

pkg_add emacs-23.4,2.tbz > stdout.log

STDOUTとSTDERRをファイルにリダイレクトするには:

pkg_add emacs-23.4,2.tbz > & stdxxx.log

STDOUTをファイルにリダイレクトしてSTDERRを非表示にするには:

( pkg_add emacs-23.4,2.tbz > stdout.log ) > & /dev/null

STDOUTをコンソールにリダイレクトしてSTDERRを非表示にするには:

( pkg_add emacs-23.4,2.tbz > /dev/tty ) > & /dev/null

STDOUTをコンソールに、STDERRをファイルにリダイレクトするには:

( pkg_add emacs-23.4,2.tbz > /dev/tty ) > & stderr.log

STDOUTをファイルにリダイレクトし、STDERRをファイルにリダイレクトするには:

( pkg_add emacs-23.4,2.tbz > stdout.log ) > & stderr.log

編集:これが機能する理由は、()のアクションが最初に発生するためです。エルゴ、STDOUTをリダイレクトした場合、()の外では使用できなくなります。これにより、STDERRだけが残り、必要に応じてリダイレクトできます。

20
nikc

私はCshでそれを行う方法を知っていますが、2つのシェルを使用しています:

csh -c 'SOME_COMMAND 1>/dev/null' |& tee file.txt

このような方法では、stdoutなしでonly stderrをfile.txtにリダイレクトできます。

1