回答:
プロセスの置換もあります。これにより、プロセスがファイルの代わりになります。次のようにファイルに
送信できますstderr
。
process1 2> file
ただし、次のようにファイルをプロセスに置き換えることができます。
process1 2> >(process2)
stderr
画面に送信してログファイルに追加する具体的な例を以下に示します
sh myscript 2> >(tee -a errlog)
weston --help 2> >(less)
)、そしてそれは私の殻を破った、私は終了し、再度ログインする必要がありました。
weston --help
でless
キーボードの操作が必要であるが、そのうちの1つだけがそれを受信する場合、問題が発生する可能性があります。grep
代わりに次のようなものでテストしてみてください。さらに、マウスとキーボードの両方の入力が、ウェストンではなく2番目のコマンドに送られる場合があります。
次のトリックを使用してとを入れ替える ことができます。次に、通常のパイプ機能を使用します。stdout
stderr
( proc1 3>&1 1>&2- 2>&3- ) | proc2
提供stdout
とstderr
の両方が開始時に同じ場所に指摘し、これはあなたが必要なものを提供します。
何x>y
ビットがないと、変更ファイルハンドルにあるx
、それは今どこファイルハンドルにその情報を送信しますのでy
、現在のポイント。私たちの特定のケースについて:
3>&1
現在のハンドル(元の標準出力)に出力する新しいハンドル3
を作成し、以下の最後の箇条書きのためにどこかに保存します。1
1>&2
ハンドル1
(stdout)を変更して、現在のハンドル2
(元のstderr)に出力します。2>&3-
ハンドル2
(stderr)を変更して現在のハンドル3
(元のstdout )に出力し、ハンドルを閉じます3
(-
末尾のを介して)。これは、ソートアルゴリズムで実際に表示されるswapコマンドです。
temp = value1;
value1 = value2;
value2 = temp;
1>&2-
ここで使用するだけでなく、ここで使用することの価値は何1>&2
ですか?fdを2
ただちに再オープン/再割り当てするだけなのに、なぜfdをクローズしたいのか分かりません。
Bash 4には次の機能があります。
`|& 'を使用すると、command1の標準エラーはパイプを介してcommand2の標準入力に接続されます。2>&1 |の省略形です。この標準エラーの暗黙的なリダイレクトは、コマンドで指定されたリダイレクトの後に実行されます。
zshにもこの機能があります。
-
他の/古いシェルでは、次のように明示的に入力するだけです
FirstCommand 2>&1 | その他のコマンド
OtherCommand
書き込みます。そのため、同じデータではなく、別の場所に移動する可能性があります。それはOPの望みとは正反対ですよね。
proc1
標準出力へとstderrに出力すると、あなたは、標準エラー出力はの標準入力に行きたいproc2
(PROC1のstdoutが起こっているところである)、そして、私の答えは、それを達成します。私は彼がどのようなOP与え尋ねた彼はおそらくないもののために、意図をお願いします。そこには潜在的なあいまいさがあります。OPは、stdoutとstderrを交換する答えを受け入れましたが、これは彼が要求したものではありません。
rc
、別のシェルであるで行うことができます。例:proc1 |[2] proc2
。いいですね。しかし、bash
そうではありません。