Припустимо, у мене на віддаленому хості працює такий сценарій:
$ cat remote_script
#!/bin/bash
exec 3>file.log
echo "Output to stdout"
echo "Output to stderr" >&2
echo "Output to fd3 >&3
Коли цей скрипт працює на віддаленій машині, він перенаправить fd3
файл на віддаленій машині. Коли я підключаюсь ssh
до пульта та виконую сценарій
$ ssh user@remote_host "./remote_script"
тоді я бачу вихід stdin
і stderr
на локальній машині. Однак вихід fd3
, як і раніше, йде у файл на віддаленій машині.
Чи є якийсь спосіб перенаправитись, fd3
щоб побачити його вихід на локальній машині і все-таки змогти його відрізнити stdout
?
Я вже пробував
$ cat remote_script
#!/bin/bash
exec 3>&1
...
$ ssh user@remote_host "./remote_script" 3>local.file.log
але це створює лише порожній файл на локальній машині, тобто я не в змозі відокремитись fd3
відstdout
ssh -L ...
(див.man ssh
), А потім скористайтесяsocat
обома кінцями для створення названої труби чи чогось іншого ... або замість того, щоб використовувати нумерований дескриптор файлу, робіть все, що ви робите, використовуючи порт в першу чергу .