次のコマンドを実行します。
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を実行しています。
2>リダイレクトは、cshまたはtcshでは機能しません。
chsh
コマンドを使用して、シェルを/ bin/shまたは/ usr/local/bin/bashに変更し、2>
スタイルのリダイレクトを使用します。 注:ルートのシェルを/ usr/local/bin/bashに変更しないでください
cshとtcshは標準出力とエラーを個別にリダイレクトできませんが、>&
は結合された出力をファイルにリダイレクトします。
あなたが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だけが残り、必要に応じてリダイレクトできます。
私はCshでそれを行う方法を知っていますが、2つのシェルを使用しています:
csh -c 'SOME_COMMAND 1>/dev/null' |& tee file.txt
このような方法では、stdoutなしでonly stderrをfile.txtにリダイレクトできます。