假设我正在运行一些命令foo
,它会提示用户进行各种操作。我想为前几个提示提供值,但手动输入其余的(即 on stdin
)。
我怎样才能做到这一点?我试过了
echo -e "foo\nbar\nbaz" | foo
这接受所有输入,然后EOF
从输入流中获取一个。我也试过
foo <(echo -e "foo\nbar\nbaz" & cat /dev/stdin)
这也不起作用。
这里的主要问题很可能foo
不是为了将文件名作为参数而设计的。(请记住,<(...)
它不会...
在标准输入上传递 ' 的输出;相反,它会扩展为一个特殊的文件名,可以从中读取以获取...
' 的输出。)要解决此问题,您可以添加另一个<
:
foo < <(echo -e "foo\nbar\nbaz" ; cat /dev/stdin)
或使用管道:
{ echo -e "foo\nbar\nbaz" ; cat /dev/stdin ; } | foo
(请注意,顺便说一下,我将其更改为&
。;
前者可以工作,但有点奇怪,因为您打算echo
处理前几个输入。)
向用户询问您想要什么,然后将其转发给您的命令
echo "Question 1: "; read ans1;
echo "Question 2: "; read ans2;
./foo bar bar "$ans1" baz "$ans2"
也许是这样?它简单高效:)