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
Что, кажется, ничего не делает
Любые идеи?
[обратите внимание, что я не хочу касаться второго терминала, чтобы выполнить это. только первый]
Ответы
Ответ 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/#
где # - другое имя терминала