Выполнение строки, отправленной с одного терминала на другой в псевдо-терминале Linux - PullRequest
0 голосов
/ 30 декабря 2011

Допустим, у меня есть один терминал, где вывод "tty" равен "/ dev / pts / 2". С другого терминала я хочу отправить команду первому терминалу и выполнить ее.Использование: echo "ls"> "/ dev / pts / 2" печатает только "ls" в первом терминале. Есть ли способ выполнить строку?

Ответы [ 4 ]

2 голосов
/ 30 декабря 2011

Нет;Терминалы не выполняют команды.Это просто каналы для передачи данных.

Вы можете выполнить команду и подключить ее к другому терминалу, как показано ниже:

ls </dev/pts/2 >/dev/pts/2 2>/dev/pts/2

Она не будет вести себя точно как будто вы запустили его с этого терминала, так как на нем не будет установлено это устройство в качестве управляющего терминала.Хотя это достаточно близко.

1 голос
/ 02 января 2013

Я понимаю, что это год с опозданием, но я думаю, что есть более простой способ. Разве это не работает?

ls > /dev/pts/2

Это работает в моей системе.

0 голосов
/ 30 декабря 2011

Обычно для выполнения команд из tty необходимы программы getty, login и shell.

Но вы также можете поместить оболочку, непосредственно выполняющую команды от псевдо-терминала. Это упрощенный пример (все проверки ошибок удалены):

int main( int argc, char** argv )
{
    int master_fd = create_my_own_psudo_terminal() ;

    // Wait until someone open the tty
    fd_set fd_rset;
    FD_ZERO( &fd_rset );
    FD_SET( master_fd, &fd_rset );
    select( master_fd + 1, &fd_rset, NULL, NULL, NULL );

    dup2( master_fd, STDIN_FILENO );
    execl("/bin/sh", "sh", 0 );

    return 0;
}

Теперь вы можете сделать следующее:

Запустите эту простую программу на первом терминале.

И отправьте свою команду со второго терминала:

echo "ls" > /dev/pts/5

И вы получите листинг в первом терминале.

Примечание. Это совершенно небезопасно, поскольку вход в систему не выполнен.

0 голосов
/ 30 декабря 2011

Попробуйте

echo `ls`

обратите внимание на другой знак кавычки.

...