Запускать команды bash и моделировать нажатия клавиш удаленно - PullRequest
0 голосов
/ 31 октября 2018

В NodeJS я могу порождать процесс и прослушивать его стандартный вывод, используя spawn().stdout. Я пытаюсь создать онлайн-терминал, который будет взаимодействовать с этой оболочкой. Я не могу понять, как отправлять нажатия клавиш в процесс оболочки.

Я пробовал это:

echo -e "ls\n" > /proc/{bash pid}/fd/0

Это на самом деле ничего не делает, кроме вывода ls и переноса строки. И когда я пытаюсь tail -f /proc/{bash pid}/fd/0, я больше не могу даже отправлять нажатия клавиш на открытый bash терминал.

Я просто бездельничаю, пытаясь понять, как процесс bash будет интерпретировать клавиши ENTER. Я не знаю, делается ли это через стандартный ввод или нет, поскольку разрывы строк не работают.

1 Ответ

0 голосов
/ 31 октября 2018

Я не верю, что вы можете каким-либо осмысленным образом "дистанционно управлять" уже запущенным обычным сеансом Bash. Что вы можете сделать, это запустить новую оболочку, которая читает из именованного канала ; затем вы можете написать в этот канал для запуска команд:

$ cd "$(mktemp --directory)"
$ mkfifo pipe1
$ bash < pipe1 &
$ echo touch foo > pipe1
[1]+  Done                    bash < pipe1
$ ls
foo  pipe1

См. Как написать несколько раз в FIFO, не открывая его снова? для более подробной информации.

...