« JScript.NETでWin32APIを使う。 | トップページ | 標準出力と標準エラーを非同期にMessageBoxに出す。 »

2007年9月 2日 (日)

標準出力と標準エラーを入れ替えられるか?

???意味不明???

例えば、

(hoge.cmd | clip.exe) 2>&1 | messagebox.exe

と書けば、標準出力はクリップボードに送られて、
標準エラーがメッセージボックスに出ます。

これを逆にしようと、

(hoge.cmd | messagebox.exe) 2>&1 | clip.exe

とすると、今度は、標準出力のメッセージボックスを閉じるまで、
標準エラーがクリップボードに送られません。:-(

標準出力と標準エラーを別々にパイプに渡すことはできても、
このやり方では、標準出力が先、標準エラーが後になります。
これが変えられるか? という話です。

標準出力と標準エラーを入れ替えればよいのです。

(hoge.cmd 4>&2 2>&1 1>&4 | clip.exe) 2>&1 | messagebox.exe

と書けば、標準エラーはクリップボードに送られて、
標準出力がメッセージボックスに出ます。

リダイレクションの解釈は、()や|の外側から。同位なら左側から。

作業用に、4~9が使用可能です。3は、CONのようです。

ただし、サブシェルに引き継がれるのは0,1,2だけなので注意。

(hoge.cmd 2>&1 1>&4 | clip.exe) 4>&1 | messagebox.exe

でもよさそうなのに、うまく行かないのはそのせいです。

« JScript.NETでWin32APIを使う。 | トップページ | 標準出力と標準エラーを非同期にMessageBoxに出す。 »