我希望能够将初始命令注入到交互式进程的启动中,这样我就可以执行以下操作:

echo "initial command" | INSERT_MAGIC_HERE some_tool

tool> initial command 

[result of initial command] 

tool> [now I type an interactive command]

什么不起作用:

  • 仅仅通过管道传输初始命令是不起作用的,因为这会导致stdin没有连接到终端

  • 写入/dev/pts/[number]会将输出发送到终端,而不是像从终端发送一样将输入发送到进程

但是有什么缺点呢

  • 生成一个命令,该命令Forking 一个子 node ,写入它的stdin,然后转发它自己的stdin中的所有内容.缺点——终端控制功能(比如线模式和字符模式)无法工作.也许我可以用伪终端代理做点什么?

  • 制作一个修改版的xterm(无论如何,我将为此任务启动一个),并使用命令行选项在遇到所需的提示字符串后注入其他命令.丑陋的

  • 制作一个我试图运行的工具的修改版本,以便它接受命令行上的初始命令.打破了标准安装.

(顺便说一句,当前感兴趣的工具是android的adbshell ——我想在手机上打开一个交互式shell ,自动运行一个命令,然后进行一个交互式会话)

推荐答案

你不需要写一个新的工具来转发stdin条——已经写了一条(cat):

(echo "initial command" && cat) | some_tool

这样做的缺点是将管道连接到some_tool,而不是终端.

Linux相关问答推荐

如何删除字符串中的`{{i:`and `}}`

在Zenity进度窗口上单击取消后如何停止bash脚本

Arch_prctl的用例是什么

如何创建一堆文件中所有单词的列表?

在Linux中随机化txt文件但保证不重复行

使用正则表达式捕获特定字符串

未找到 SDL_Vertex 和 SDL_RenderGeometry

Ubuntu 20 不支持 MAP_FIXED_NOREPLACE

Linux合并文件

BASEDIR 环境变量未正确定义

如何将输出从 grep 传送到 cp?

在亚马逊 ec2 linux 微型实例上的 virtualenv 中安装 scipy 时遇到问题

./studio.sh 之后的 Android Studio 错误

如何使用 Ansible 等待服务器重启?

使用sudo apt-get install build-essentials

错误:ld.so:无法预加载对象 LD_PRELOAD:忽略

如何关闭被杀死的程序打开的套接字?

Docker:您是否try 连接到没有 TLS 的启用 TLS 的守护进程?

如何在我的终端中编辑文本文件

Linux shell 中的排序和唯一性