为bash命令提供部分输入

时间:2013-06-04 22:19:37

标签: bash pipe

说我正在运行一些命令foo,它会提示用户输入各种内容。我想为前几个提示提供值,但是手动输入其余的值(即在stdin上)。

我该怎么做?我试过了

echo -e "foo\nbar\nbaz" | foo

这接受所有输入,但随后从输入流中获取EOF。我也试过了

foo <(echo -e "foo\nbar\nbaz" & cat /dev/stdin)

也不起作用。

2 个答案:

答案 0 :(得分:2)

这里的主要问题很可能是foo并非旨在将文件名作为参数。 (请注意,<(...)未在标准输入上传递...的输出;相反,它可以从expanded to a special filename获取,以获取...的输出。)要解决此问题,您可以添加另一个<

foo < <(echo -e "foo\nbar\nbaz" ; cat /dev/stdin)

或使用管道:

{ echo -e "foo\nbar\nbaz" ; cat /dev/stdin ; } | foo

(请注意,顺便说一下,我将&更改为;。前者可以使用,但有点奇怪,因为您打算让echo处理第一个几个输入。)

答案 1 :(得分:0)

询问用户您想要的内容,然后将其转发给您的命令

echo "Question 1: "; read ans1;
echo "Question 2: "; read ans2;
./foo bar bar "$ans1" baz "$ans2"

也许那样?它简单而有效:)