Я вижу два направления для вас.
Вы можете «обновить» свой сервер Ubuntu до конфигурации рабочего стола с локальной версией X и любыми приложениями с графическим интерфейсом, которые вы хотите, включить общий доступ к рабочему столу и использовать VNC, включив «Общий рабочий стол» (vino -сервер ). Затем со своего настольного компьютера вы можете получить доступ ко всему рабочему столу с помощью VNC. (Remmina или Vinagre -Я использую Remmina, потому что Vinagre слишком часто дает сбой, на мой вкус ). Это направление я использую лично -X, работающий локально, работает быстрее, и я могу отключить соединение VNC, оставив приложения работающими. Я бы рекомендовал использовать переадресацию портов в ssh для безопасного подключения через Интернет, а не открывать порт 5900.
Вы можете установить достаточно приложений X и GUI для запуска приложений на сервере со всеми окнами, созданными на вашем настольном компьютере. Просто «ssh -X serverrname» и запускайте приложения из оболочки. Вы также можете запустить оконный менеджер на сервере так же, как приложение, а затем использовать его для запуска других приложений. Я не делал этого много, но я полагаю, что после того, как вы «удачно установите» приложение с графическим интерфейсом на сервере Ubuntu, у вас должно быть достаточно установленного для запуска этого приложения из оболочки. Я нашел совет, что вы должны сначала установить пакет xauth. Например, пакет x11 -apps содержит небольшие X-приложения, такие как xclock, xeyes и xcalc, поэтому «ssh -X servername» и «sudo apt install xauth x11 -apps ; xclock» помогут вам начать работу..
Вы можете найти собственный совет Ubuntu по этому вопросу вhttps://help.ubuntu.com/community/ServerGUI
Вы делаете это именно так, как показали:
somecommand | tee >(othercommand)
Вывод somecommand
будет записан на вход othercommand
и на стандартный вывод.
Проблема с подстановкой вашего процесса echo 'bar'
заключается в том, что он не заботится о входных данных, поступающих через tee
из echo 'foo'
, поэтому он просто выводит bar
как можно быстрее и завершается. Затем утилита tee
пытается выполнить запись в него, но терпит неудачу и, следовательно, прекращает (получение сигнала PIPE
)перед записью строки в стандартный вывод. Или у tee
может быть время для записи данных в процесс подстановки, и в этом случае и bar
, и foo
будут напечатаны на стандартном выводе, это не детерминировано.
Нужно убедиться, что команда в процессе подстановки действительно считывает отправленные ей данные (иначе какой смысл отправлять ей данные?)Как предлагает дядя Билли в комментариях , это легко организовать в вашем примере, позволив процессу подстановки просто использоватьcat >/dev/null
(при условии, что вас не интересуют данные, поступающие изtee
):
echo 'foo' | tee >(cat >/dev/null; echo 'bar')
или
echo 'foo' | tee >(echo 'bar'; cat >/dev/null)
(эти два варианта будут различаться только порядком окончательного вывода двух строк)