我需要从一个terminal写命令到另一个terminal。
我试过这些:
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
哪些似乎没有做任何事情
有任何想法吗?
[注意,我不想触摸第二个terminal来完成这个任务。 只有第一个]
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)
可以用下面的脚本同时在多个终端上显示一个命令的输出,它可以和所有的控制台程序(包括编辑器)一起工作。 比如做:
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
这是毛茸茸的。 你正在尝试使用的proc中的stdin文件是一个到终端设备的符号链接(可能是/ dev / pts / something)。 有两个进程打开该设备:shell(你的目标)和终端仿真器(例如gnome-terminal),它们使用它像一个套接字来双向传递数据。 据推测后者是窃取输出和显示它,所以外壳从来没有看到它。 我不认为这种技术会起作用。
你想达到什么目的? 你不能像使用像popen()这样的传统工具来运行这个进程? 如果是GUI终端仿真器,则可以尝试通过X事件或内核的uinput API伪造键盘输入。
打开2个终端,然后在您要在ttd上写入的终端上键入ttd将显示终端移动到另一个终端的地址,然后键入cat>(第二个终端的地址),然后按回车
看着:
man 1 script
例如:
script -f /dev/tty1
这是错误的方式去做 – 你可能会显示在终端,但不执行。
你将需要做一些事情,比如告诉shell从命名管道或者netcat / socat中读取数据。 或者你可以尝试注入按键或使用xtest(有时也有另一种方式,我忘了X下)。
命令> dev / pts /#其中#是另一个终端的名称