前置到stdin

时间:2012-10-26 06:07:13

标签: windows batch-file stdin

我有一个交互式命令行程序,我们称之为program.exe。在它运行时,我可以键入一些不同的命令来执行不同的操作。我们称之为:doA,doB,doC和quit。现在,事实证明,我想在program.exe中做的第一件事是总是 doA。我想保存几个键击并自动让program.exe在启动时运行命令doA。不幸的是,我不能只在命令行上传递“doA”,因为创建program.exe的人没有实现该功能。

我看到它的方式,我有几个选择:

  • 编写另一个调用program.exe的程序,将doA写入其stdin,然后将其自己的stdin挂钩到program.exe的stdin,并将program.exe的sdtout挂钩到它自己的stdout。这可能会奏效,但我想看看是否有一个不需要编译器的解决方案

  • 使用一些批处理文件魔法将doA阻塞到program.exe的stdin中。这是我有疑问的部分。这是我到目前为止所尝试的内容:

echo doA | program.exe

这是有效的,因为program.exe执行doA,但是我无法向program.exe输入任何其他命令。 Echo正在占用program.exe的stdin

more | echo doA | program.exe

这也有效,并且更接近我追求的目标。 program.exe执行doA,我看到doA的输出。我也可以输入其他命令,但是我看不到这些命令的输出。此外,当我发送退出命令时,program.exe终止(我猜),但我仍然停留在“更多”命令中,我可以继续输入行,直到我按下ctrl + c。

问题:还有另一种方法可以做我正在尝试用bat文件做的事情吗?从概念上讲,我认为我需要将两个流(键盘和文字“doA”)组合成一个并将其传递给program.exe,但我可能会离开。

1 个答案:

答案 0 :(得分:2)

首先,more | echo doA | program.exe没有按照您的想法行事。 发送 doA echo之后不会将这些管道阶段连接在一起,而是创建完美的接收器 - 这就是为什么您看不到命令​​回显的原因。它们无处可去,program.exe 执行。我不认为有一种简单的方法可以直接从命令行实现您想要的东西,但可以通过使用小批量文件轻松解决。创建批处理文件,例如args.bat

@echo off 
echo First command
more

现在按args|program.exe

运行您的程序