答案1
它可能不完全是您正在寻找的,但我通常通过在终端中运行屏幕会话来解决此类问题。
我这样做:
- 在终端 1 中,我启动一个名为的新屏幕会话术语1通常
screen -S term1
,当我需要此功能时,终端 1 还不存在。在这种情况下,我在新终端中创建会话xterm -e screen -S term1 & ; disown
您可能想知道& ; disown
.这是因为我希望在 xterm 启动后返回 shell,并且xterm
如果我启动它的 shell 死掉了,我也不想死 - 我在第二个终端中执行类似的操作:(
screen -S term2
或通过运行创建一个新终端xterm -e screen -S term2 & ; disown
) - 现在通讯工作如下:
- 您可以使用如下命令从任何地方(包括终端 2)向第一个终端发送文本:
screen -S term1 -X stuff 'echo "foo"\n'
结果与echo "foo"
在第一个终端输入并按Enter - 更简单的示例:发送输入
some words
,但是不是跟随它Enter到 2 号航站楼,您可以使用screen -S term2 -X stuff 'some words'
- 您可以使用如下命令从任何地方(包括终端 2)向第一个终端发送文本:
旁注:
- 如果您已经命名了屏幕会话
term1
和/或term2
使用其他名称 - 如果您
screen -S somename
在已经存在的终端中运行,请注意,运行后只有屏幕会话会被终止exit
。
如果您希望整个终端停止,请screen -S somename ; exit
改为使用。
这在新创建的终端中是不必要的。
答案2
TIOCSTI 的工作原理如评论中所述特里格多于:https://stackoverflow.com/a/29615101/2995591
答案3
每个进程有3个默认的“文件描述符”
0 is stdin (standart input)
1 is stdout (standart output)
2 is stderr (standart error output)
您需要找到 shell 进程的 PID,然后您可以执行以下操作:
echo "test" > /proc/{your_shell_pid}/fd/1
这将在 shell 进程的标准输出中打印测试