Подтвердить что ты не робот

Linux - писать команды с одного терминала на другой

Мне нужно написать команды с одного терминала на другой терминал.

Я пробовал:

echo -e "ls\n" > /proc/pid/fd/0
echo -e "ls\n" > /dev/pts/4

Которая только выводит ls как вывод и не выполняет.

Я пробовал:

chmod 777 /dev/tty4 ;echo "ls" > /dev/tty4
chmod 777 /dev/tty40 ;echo "ls" > /dev/tty40

Что, кажется, ничего не делает

Любые идеи?

[обратите внимание, что я не хочу касаться второго терминала, чтобы выполнить это. только первый]

4b9b3361

Ответ 1

Код Python:

#!/usr/bin/python

import sys,os,fcntl,termios
if len(sys.argv) != 3:
   sys.stderr.write("usage: ttyexec.py tty command\n")
   sys.exit(1)
fd = os.open("/dev/" + sys.argv[1], os.O_RDWR)
cmd=sys.argv[2]
for i in range(len(cmd)):
   fcntl.ioctl(fd, termios.TIOCSTI, cmd[i])
fcntl.ioctl(fd, termios.TIOCSTI, '\n')
os.close(fd)

Ответ 2

Можно показать вывод команды на нескольких терминалах одновременно со следующим script., и он работает со всеми консольными программами, включая редакторы. Например:

execmon.bash  'nano hello.txt' 5

Откройте редактор, и как вывод, так и текст, который мы вводим, будут перенаправлены на виртуальный терминал № 5. Вы можете увидеть свои терминалы:

ls /dev/pts

Каждый виртуальный терминал имеет связанное число.

Работает с обычным терминалом, консолью и xterm, просто создайте файл execmon.bash и поставьте это:

#! / bin / bash
# execmon.bash
# Script to run a command in a terminal and display the output
# in the terminal used and an additional one.
param = $ #
if [$ param-eq 2]; Then
    echo $ 1 | tee a.out a.out && cat> / dev / pts / $ 2 && exec `cat` a.out | tee / dev / pts / $ 2 && rm a.out
else
    echo "Usage:"
    echo "execmon 'command' num '
    echo "-command is the command to run (you have to enter ')"
    echo "-num is the number of virtual console to output to the"
fi

Пример:

execmon.bash 'ls-l' 5
execmon.bash 'nano Hello.txt' 5

Ответ 3

Это волосатое. Файл stdin в proc, который вы пытаетесь использовать, является символической ссылкой на терминальное устройство (возможно/dev/pts/something). Существуют два процесса, открывающие это устройство: оболочка (ваша цель) и эмулятор терминала (например, gnome-terminal), и они используют его как сокет для передачи данных в обоих направлениях. Предположительно, последний крадет выход и отображает его, поэтому оболочка его никогда не видит. Я не думаю, что этот метод будет работать.

Чего вы пытаетесь достичь? Вы не можете запустить этот процесс в качестве ребенка с помощью обычных инструментов, таких как popen()? Если это эмулятор терминала GUI, вы можете попытаться подделать ввод с клавиатуры через X-события или API uinput ядра.

Ответ 4

открыть 2 терминала затем введите ttd на терминал, который вы хотите записать на ttd покажет вам адрес терминала перейдите на другой терминал и введите cat > (адрес второго терминала) и нажмите enter

Ответ 5

посмотреть:

man 1 script

например:

script -f /dev/tty1

Ответ 6

Это неправильный способ сделать это - вы можете получить его в терминал, но не выполнен.

Вам нужно будет сделать что-то вроде командной строки для чтения из именованного канала или из netcat/socat. Или вы можете попробовать вводить нажатия клавиш как root или использовать xtest (иногда также есть другой способ под X, который я забыл).

Ответ 7

командa > dev/pts/# где # - другое имя терминала