bash linux - писать и читать из stdin и stdout - PullRequest
2 голосов
/ 11 апреля 2019

У меня есть приложение, которое я могу запустить из строки commonand, и оно действует для меня как CLI.

Однако это часть набора приложений, и теперь я хочу, чтобы все они запускались при загрузке, и поэтому они запускаются как служба (systemd).

Так что все мои приложения, включая мой CLI, работают отлично. Однако я не вижу вывод CLI и не могу отправлять ему команды.

Я использовал stdout для печати экрана CLI - я думаю, что я могу обойти это путем вывода в файл - но было бы неплохо получить доступ к его stdout. Большая проблема в том, что я не могу написать на его стандартный ввод.

Я прочитал это: запись в stdin-of-background-process и попытался echo -e "command\n" > /proc/.../0, но ничего не произошло - я проверил журнал моего CLI (записывается в файл) и он не получил ввод.

Затем я сделал ls -l на /proc/<pid>/fd/ и заметил, что 0 --> /dev/null означает, что stdin связан с / dev / null.

Итак, как я могу получить доступ к его стандартному вводу?

Дополнительный вопрос - есть ли способ работы (в той же оболочке bash), чтобы я перенаправлял свой стандартный ввод в стандартный поток этого процесса И перенаправлял стандартный вывод процесса в свою оболочку?

1 Ответ

1 голос
/ 11 апреля 2019

Найдите терминал (pty), который вы хотите перенаправить.Пример для перенаправления pty0 можно сделать с помощью:

exec < /dev/pty0  #stdin
exec > /dev/pty0  #stdout
...