私は BASH 4 を使用しています。出力の種類を示すために出力の前に合法的に追加する方法を見つけようとしています。私はこのようなものでこれを行うことができます...
ls -l /tmp/abcdefgh 2> >(sed 's/^/stderr: /') 1> >(sed 's/^/stdout: /')
stderr: ls: cannot access /tmp/abcdefgh: No such file or directory
ls -l /tmp/ 2> >(sed 's/^/stderr: /') 1> >(sed 's/^/stdout: /')
stdout: drwxr-xr-x 3 root root 4096 2010-10-15 09:08 fsck
stdout: drwxr-xr-x 2 root root 4096 2010-09-10 06:01 kernel
stdout: drwxr-xr-x 2 root root 4096 2010-09-10 06:01 temp_keys
...
SSH経由でログインしてインタラクティブに実行すると、これがうまくいくようです。ただし、コマンドを引用符で囲んでssh経由でコマンドをリモートコマンドとして実行しようとすると、これが常に正しく機能するとは限りません。私はいつでも stdout 行を取得できますが、stderr 行を取得できないことがあります。
これにより、出力が生成されます...
ssh root@server1 "ls -l /tmp/ 2> >(sed 's/^/stderr: /') 1> >(sed 's/^/stdout: /')"
これはエラーメッセージさえも生成しません...
ssh root@server1 "ls -l /tmp/abcdefgh 2> >(sed 's/^/stderr: /') 1> >(sed 's/^/stdout: /')"
ただし、これは wget status の結果を stderr の結果として表示します (これは正しいはずです)。
ssh root@server1 "wget http://server2/package.rpm 2> >(sed 's/^/stderr: /') 1> >(sed 's/^/stdout: /')"