我有一个命令可以构建东西,然后通过提示提供交互式 shell(例如,键入 R 重新启动,Q 退出,...)。
我想使用该命令,但一旦到达提示部分就停止它。有没有办法在调用我的命令时传递“Q”参数,或者在到达提示符后杀死它?
答案1
鉴于您的脚本正在通过“正常”读取输入,您可以使用另一个程序(例如或通过管道)read
提前为其提供输入:echo
printf
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 也很有用。