14

I need to write commands from one terminal to another terminal.

I tried these:

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

Which just prints the ls as output and doesn't execute.

I tried these:

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

Which don't seem to do anything

Any ideas?

[note that I don't want to touch the second terminal to accomplish this. only the first one]

4

7 回答 7

12

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)
于 2013-12-04T22:01:09.403 回答
3

可以使用以下脚本同时在多个终端上显示命令的输出。它适用于所有控制台程序,包括编辑器。例如做:

execmon.bash  'nano hello.txt' 5

打开编辑器,我们介绍的输出和文本都将重定向到虚拟终端号 5。您可以看到您的终端:

ls /dev/pts

每个虚拟终端都有一个关联号码。

与普通终端、konsole 和 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
于 2012-04-29T22:24:52.103 回答
2

这是毛茸茸的。您尝试使用的 proc 中的标准输入文件是终端设备的符号链接(可能是 /dev/pts/something)。有两个进程打开了该设备:shell(您的目标)和终端仿真器(例如 gnome-terminal),它们像套接字一样使用它来双向传递数据。大概后者正在窃取输出并显示它,因此外壳永远不会看到它。我认为这种技术行不通。

你想达到什么目的?你不能像孩子一样使用像popen()这样的传统工具来运行这个过程吗?如果它是 GUI 终端仿真器,您可以尝试通过 X 事件或内核的 uinput API 伪造键盘输入。

于 2012-04-29T21:54:57.040 回答
1

打开 2 个终端,然后在要在 ttd 上写入的终端上键入 ttd 将显示终端的地址移动到另一个终端并键入 cat >(第二个终端的地址)并按 Enter

于 2014-09-20T11:42:11.087 回答
1

看着:

man 1 script

例如:

script -f /dev/tty1
于 2015-01-24T11:05:21.017 回答
0

这是错误的处理方式 - 您可能会在终端中显示它,但未执行。

你需要做一些事情,比如告诉 shell 从命名管道或 netcat/socat 中读取。或者您可以尝试以 root 身份或使用 xtest 注入击键(有时在 X 下还有另一种方式,我忘记了)。

于 2012-04-29T21:54:16.233 回答
-1

command > dev/pts/# 其中 # 是另一个终端的名称

于 2014-11-26T15:04:11.677 回答