Лучший способ `tee` для stdout и процесса

Я вижу два направления для вас.

  1. Вы можете «обновить» свой сервер Ubuntu до конфигурации рабочего стола с локальной версией X и любыми приложениями с графическим интерфейсом, которые вы хотите, включить общий доступ к рабочему столу и использовать VNC, включив «Общий рабочий стол» (vino -сервер ). Затем со своего настольного компьютера вы можете получить доступ ко всему рабочему столу с помощью VNC. (Remmina или Vinagre -Я использую Remmina, потому что Vinagre слишком часто дает сбой, на мой вкус ). Это направление я использую лично -X, работающий локально, работает быстрее, и я могу отключить соединение VNC, оставив приложения работающими. Я бы рекомендовал использовать переадресацию портов в ssh для безопасного подключения через Интернет, а не открывать порт 5900.

  2. Вы можете установить достаточно приложений 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

-1
19.09.2019, 00:56
2 ответа

Вы делаете это именно так, как показали:

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)

(эти два варианта будут различаться только порядком окончательного вывода двух строк)

4
28.01.2020, 05:08
echo 'foo' | tee /dev/tty |other-program
-1
28.01.2020, 05:08

Теги

Похожие вопросы