启动命令并提供提示参数

启动命令并提供提示参数

我有一个命令可以构建东西,然后通过提示提供交互式 shell(例如,键入 R 重新启动,Q 退出,...)。

我想使用该命令,但一旦到达提示部分就停止它。有没有办法在调用我的命令时传递“Q”参数,或者在到达提示符后杀死它?

答案1

鉴于您的脚本正在通过“正常”读取输入,您可以使用另一个程序(例如或通过管道)read提前为其提供输入:echoprintf

echo Q | your-program-here

一个更复杂的例子可能是:

(echo 1; echo thing2; echo yes; echo Q) | your-program-here

甚至可以使用类似的程序来完成更复杂的自动输入脚本

答案2

为了确保该命令不会等待交互式输入,所需要做的就是从某个地方重定向其输入。大多数程序(如您所描述的程序)一旦到达标准输入的末尾就会退出,因此,如果您不希望程序执行除初始作业之外的任何操作,请向其传递空输入。

thatcommand </dev/null

如果您确实想传递一些固定输入,您可以使用这里的文档

thatcommand <<EOF
Q
EOF

您也可以在此处的文档中包含变量。如果需要更动态地构造输入,您可以通过管道传输您喜欢的任何 shell 代码。

{
  # complex shell code goes here
  echo Q
} | thatcommand

我假设该程序从标准输入读取。一些程序强制从终端读取,因此输入重定向对它们不起作用。在这种情况下,您需要像这样的工具预计。如果您需要提供给程序的输入取决于某些先前的输出,Expect 也很有用。

相关内容