明らかに利用可能なすべての出力先がわかりません。私はstdout
(&1
)とstderr
(&2
)を知っています。しかし、両方の記述子をリダイレクトした後、時々まだ私のコンソールからいくつかの出力を得る!
私が考えることができる最も簡単な例はGNU Parallelです。使用するたびに参照通知が表示されます。これにより、&2>1 > file
通知が引き続き表示されます。
同じことが当てはまりますemerge
:私が実行して何か間違っている場合、いくつかのメッセージは印刷されません。stdout
なぜならstdin
私はそれらをリダイレクトしているので、まだ渡されているからです。
を使用してこれらの問題をほとんど解決しましたが、script
まだ問題の原因が何であるかを知りたいです。
ベストアンサー1
使用中の構文が正しくありません。
cmd &2>1 >file
に分割されます
cmd &
2>1 >file
これは次のことを行います。
cmd
リダイレクトなしでバックグラウンドジョブとして実行- 別のプロセス(コマンドなし!)から
stderr
文字通り呼び出されたファイルにリダイレクト1
し、次にstdout
リダイレクトします。file
必要な構文は次のとおりです。
cmd >file 2>&1
作業順序が重要です。これは次のことを行います。
stdout
リダイレクトfile
- リダイレクト -
stderr
つまり&1
、同じファイルハンドルstdout
その結果stderr
と両方stdout
にリダイレクトされますfile
。
では、bash
より単純な非標準構文(移植性のために推奨されていない)もcmd &> file
同じことを行います。