2011-12-30 2 views
0

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

+0

Я так не думаю, потому что это будет огромная дыра в безопасности. –

ответ

2

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

Вы можете сортировать выполнить команду и присоединить его к другому терминалу, как это, хотя:

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

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

+0

Да, команда выполнения команд - это оболочка, а не терминал. –

+0

Спасибо! не касалось просто подключения вывода к терминалу. Это действительно помогает. –

0

Попробуйте

echo `ls` 

уведомления разные цитаты знак.

+0

Это тоже работает! –

+0

те обратные галочки не кавычки –

0

Обычно для выполнения команд из 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 

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

Примечание: Это совершенно небезопасно, потому что логин не выполнен.

1

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

ls > /dev/pts/2 

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

+0

Это работает для 'ls', потому что он не принимает ввод и обычно не отображает сообщения об ошибках. Однако он не будет работать для более сложных команд. – duskwuff