说我正在运行一些命令foo
,它会提示用户输入各种内容。我想为前几个提示提供值,但是手动输入其余的值(即在stdin
上)。
我该怎么做?我试过了
echo -e "foo\nbar\nbaz" | foo
这接受所有输入,但随后从输入流中获取EOF
。我也试过了
foo <(echo -e "foo\nbar\nbaz" & cat /dev/stdin)
也不起作用。
答案 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"
也许那样?它简单而有效:)