2013-11-20 87 views
1

我想从脚本运行一个特定的程序,通常会让用户输入一些输入(几次)。从多行输入的shell脚本运行linux程序

例如,当我在shell启动程序和我的投入将是:

t [ENTER] 
3 [ENTER] 
12 [ENTER] 
e [ENTER] 

,其中一个具有每一个程序要下一个输入行之后等待。

我想有像

echo t | prog 
echo 3 | prog 
echo 12 | prog 
echo e | prog 

一个解决方案,但在第一行之后该程序在没有输入运行,因为空的缓冲液中。我该如何解决这个问题?

回答

3

总理用例为这里的文档:

prog <<EOF 
t 
3 
12 
e 
EOF 
+0

为我工作。谢谢。 – hp7289

2

猜猜这取决于你正在使用什么样的外壳。与bash可以echo多行喜欢,

$ echo "t 
> 3 
> 12 
> e" | prog 
0

read命令读取一行,由一个新行终止。您可以在您的回音换行符:

echo "t\n3\n12\ne" | prog

+1

'echo'不处理转义像'\ N'序列,除非'-e'选项在命令行中指定。另一种解决方案是使用'printf'。 – 2013-11-20 16:48:56

+0

'bash'内建'echo'不处理没有'-e'选项的转义序列,这与POSIX标准不同。我假设,像'dash'这样的壳不需要'-e'。但是,这只是支持使用'printf'的建议。 – chepner