Попросите, чтобы запущенный bash (интерактивный) выполнил команду извне - PullRequest
3 голосов
/ 10 сентября 2011

У меня открыт терминал (xterm) с запущенным в нем bash, показывающим подсказку.Предположим, я знаю pid этого запущенного bash и tty, связанный с этим терминалом.Есть ли способ вообще не касаться этого терминала, а только использовать информацию tty и pid, чтобы попросить этот самый запущенный bash выполнить команду?Наивно echo "команда"> tty покажет только команду в терминале, но bash не получит ее как пользовательский ввод.

Ответы [ 2 ]

4 голосов
/ 10 сентября 2011

Используйте TIOCSTI ioctl.Пример в C:

char* cmd="ls\n";
int fd = open (ptsname, O_RDWR);

while (*cmd)
{
    ioctl(fd, TIOCSTI, cmd++);
}
0 голосов
/ 25 ноября 2017

(2017) Следующее практично из сценария или командной строки:

stty -echo; perl -le 'require "sys/ioctl.ph"; ioctl(STDIN, &TIOCSTI, $_) for split "", join " ", @ARGV ' `_cmds_` ;stty echo; _app_

Если вы отбросите окончательное приложение , то вывод cmds будетприсутствует во входной очереди (как она называется в ядре), в текущей консольной оболочке или в приложении, которое shell редактировало командную строку.stty просто останавливает любое (полнодуплексное) эхо на экране.

Примечание: технически это явно не "имитация нажатия клавиши".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...