我需要将命令从一个终端写入另一个终端。
我试过这些:
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
哪些似乎什么都不做
有什么想法吗?
[请注意,我不想触摸第二个终端来完成此任务。只有第一个]
答案 0 :(得分:8)
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)
答案 1 :(得分: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
答案 2 :(得分:2)
这很毛茸茸。您尝试使用的proc中的stdin文件是终端设备的符号链接(可能是/ dev / pts / something)。有两个进程打开该设备:shell(您的目标)和终端仿真器(例如gnome-terminal),他们像套接字一样使用它来向两个方向传递数据。据推测,后者正在窃取输出并显示它,因此shell永远不会看到它。我认为这种技术不会起作用。
你想要完成什么?您不能使用像popen()这样的传统工具作为孩子运行该过程?如果它是GUI终端仿真器,您可以尝试通过X事件或内核的uinput API来伪造键盘输入。
答案 3 :(得分:1)
打开2个终端 然后在要写入的终端上键入ttd ttd将显示终端的地址 移动到另一个终端并输入cat> (第2终端的地址) 然后按Enter键
答案 4 :(得分:1)
看看:
man 1 script
例如:
script -f /dev/tty1
答案 5 :(得分:0)
这是错误的方法 - 你可能会把它显示在 终端,但没有执行。
你需要做一些事情,比如告诉shell从命名管道或netcat / socat读取。或者您可以尝试以root身份或使用xtest注入击键(在X下我有时会忘记另一种方式)。
答案 6 :(得分:-1)
命令>开发/ PTS /# 其中#是另一个终端的名称