2

假设我正在运行一些命令foo,它会提示用户进行各种操作。我想为前几个提示提供值,但手动输入其余的(即 on stdin)。

我怎样才能做到这一点?我试过了

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

这接受所有输入,然后EOF从输入流中获取一个。我也试过

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

这也不起作用。

4

2 回答 2

3

这里的主要问题很可能foo不是为了将文件名作为参数而设计的。(请记住,<(...)它不会...在标准输入上传递 ' 的输出;相反,它会扩展为一个特殊的文件名,可以从中读取以获取...' 的输出。)要解决此问题,您可以添加另一个<

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

或使用管道:

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

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

于 2013-06-04T22:26:24.543 回答
0

向用户询问您想要什么,然后将其转发给您的命令

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

也许是这样?它简单高效:)

于 2013-06-04T22:27:28.947 回答