次のコマンドを実行します。
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を実行しています。
答え1
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が残り、必要に応じてリダイレクトできます。
答え2
2> cshまたはtcshではリダイレクトは機能しません。
スタイルリダイレクトを使用するには、このchsh
コマンドを使用してシェルを/bin/shまたは/usr/local/bin/bashに変更します2>
。メモ:ルートのシェルを/usr/local/bin/bashに変更しないでください。
cshとtcshは標準出力とエラーを個別にリダイレクトできませんが、結合された>&
出力をファイルにリダイレクトします。
答え3
Cshでこれを行う方法を知っていますが、2つのシェルを使用してください。
csh -c 'SOME_COMMAND 1>/dev/null' |& tee file.txt
これにより、リダイレクトが許可されます。ただstderrをfile.txtとして、stdoutを使用しない - それはあなたが望むものです。
答え4
nikcの答えに関してBourneシェルと同じ動作を達成するには、/dev/tty
FIFOを使用します。
STDOUTをコンソールにリダイレクトし、STDERRを非表示にします。
mkfifo stdout
( pkg install -y emacs > stdout ) >& /dev/null & cat stdout
STDERRをコンソールにリダイレクトしてSTDOUTを非表示にするには、次の手順に従ってください。
pkg install -y emacs > /dev/null