Допустим, у меня есть один терминал, где вывод «tty» равен «/ dev/pts/2» С другого терминала, я хочу отправить команду первый терминал и выполнить его. Использование: echo "ls"> "/ dev/pts/2" печатает только "ls" в первом терминале Есть ли способ выполнить строку?Linux-псевдотерминалы: выполнение строки, отправленной с одного терминала другим
ответ
Нет; терминалы не выполняют команды. Это всего лишь каналы для данных.
Вы можете сортировать выполнить команду и присоединить его к другому терминалу, как это, хотя:
ls </dev/pts/2 >/dev/pts/2 2>/dev/pts/2
Он не будет вести себя точно как вы запускали его от этого терминала, хотя, как он выиграл Это устройство установлено как управляющий терминал. Однако это достаточно близко.
Да, команда выполнения команд - это оболочка, а не терминал. –
Спасибо! не касалось просто подключения вывода к терминалу. Это действительно помогает. –
Попробуйте
echo `ls`
уведомления разные цитаты знак.
Это тоже работает! –
те обратные галочки не кавычки –
Обычно для выполнения команд из 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
И вы получите список в первом терминале.
Примечание: Это совершенно небезопасно, потому что логин не выполнен.
Я понимаю, что это год спустя, но есть более простой способ, я думаю. Разве это не работает?
ls > /dev/pts/2
Это работает на моей системе.
Это работает для 'ls', потому что он не принимает ввод и обычно не отображает сообщения об ошибках. Однако он не будет работать для более сложных команд. – duskwuff
Я так не думаю, потому что это будет огромная дыра в безопасности. –