我正在使用 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 将命令作为远程命令运行,并且命令用引号引起来,这并不总是正确的。我总能得到标准输出线,但有时不能得到标准错误线。
这将产生输出...
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 状态结果显示为 stderr 结果(它应该)
ssh root@server1 "wget http://server2/package.rpm 2> >(sed 's/^/stderr: /') 1> >(sed 's/^/stdout: /')"