使用Shell脚本从Linux运行多行输入的程序

7
我想从脚本中运行一个特定的程序,这个程序通常会要求用户输入一些内容(多次)。
例如,当我在Shell中启动程序时,我的输入可能是:
t [ENTER]
3 [ENTER]
12 [ENTER]
e [ENTER]

“在程序需要下一个输入的每一行后都必须等待的地方。”
“我想可能有一种解决方法,像…”
echo t | prog
echo 3 | prog
echo 12 | prog
echo e | prog

但是在第一行之后,程序因为空缓冲区而运行而没有输入。我该怎么修复它?
3个回答

15

Here-document的主要用途:

prog <<EOF
t
3
12
e
EOF

对我有用。谢谢。 - hp7289

3

取决于你使用的是哪种shell。在bash中,你可以像这样打印多行文字:

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

-1

read 命令读取一行,以换行符为结尾。您可以在 echo 中包含换行符:

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


1
echo 命令在没有使用 -e 选项的情况下无法处理转义序列,如 \n。另一种解决方案是使用 printf 命令。 - user405725
bash 内置的 echo 命令在没有 -e 选项的情况下无法处理转义序列,这与 POSIX 标准不同。像 dash 这样的 shell 可能不需要 -e。然而,这只是支持使用 printf 的建议。 - chepner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接