Я использую 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 как результаты stderr (что и должно быть)
ssh root@server1 "wget http://server2/package.rpm 2> >(sed 's/^/stderr: /') 1> >(sed 's/^/stdout: /')"