繁体   English   中英

从脚本直接运行命令到另一个进程

[英]Run a command from a script directly to another process

我目前正在研究与其他进程进行交互的脚本。 如果相关,则所述过程是simdebug控制台。 我想要的是正确退出它,因为当我杀死进程本身时,它会创建一个锁定文件.lck。 Simdebug控制台正在等待输入,并在接收到quit之后关闭,然后依次按下q和n(分别由回车按键来验证命令)。

我设法使用发送了一些命令到Simdebug

echo quit > /proc/< PID >/fd/1

但是它只打印回显的结果,我找不到发送回车按键的方法,只有新行'\\ n'。

我不能设法发送一个退出命令,该命令将直接在Simdebug中执行,而不是在发送该命令的终端中执行。

如果回答了这两点之一,我的问题就会解决:

  • 是否有可能模拟验证按键,如下所示:术语1:echo ifconfig; echo <enter keypress>然后执行术语2的读取缓冲区中的内容

  • 有没有办法在另一个过程中已经执行命令

条款1:<未知语法> pwd

术语2 <显示term2的pwd而不是term1>

这将不仅在终端之间运行,而且在读取模式下已经打开了进程。

这实际上是一件很难的事情。 如果将字符从另一个主终端发送到/ proc / self / fd / 0设备或类似的stdin设备链接,则它将字符输出到另一个进程的主终端的输出侧。

有了这样的工具expectpdipscreen ,你可以,如果它来自其主终端发送你想封装在他们的虚拟终端的过程东西。 但是,如果某个进程正在运行,那么它将已经拥有自己的终端。

如果可以说服您的控制台使用reptyr进行控制性终端传输,那么可能会很幸运。

例如,如果您的控制台具有进程ID 999999(并且您已经安装了screenreptyr并且也许做了一些事情来安抚selinux或apparmor / yama保护):

screen -dmS automateconsole
screen -S automateconsole -p 0 -X stuff 'reptyr 999999^M'
screen -S automateconsole -p 0 -X stuff 'quit^M'
sleep 1s
screen -S automateconsole -p 0 -X stuff 'q^M'
sleep 1s
screen -S automateconsole -p 0 -X stuff 'n^M'
sleep 1s
screen -S automateconsole -p 0 -X stuff 'exit^M'

但请注意:

  • 您可能应该清理初始化控制台的程序。
  • 至少在Ubuntu上,我无法从其他SSH会话reptyr进程。

https://github.com/nelhage/reptyr

http://theterminallife.com/sending-commands-into-a-screen-session/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM