如何在while循环中将多行输出到文件?

时间:2019-10-14 04:02:04

标签: bash heredoc

我正在编写一个Bash脚本,并且试图打印出多行输出并将它们打印到文件中。到目前为止,这是我尝试过的内容,但这只是一个示例,但与我要完成的操作非常相似。

我正在尝试每2秒将“ Hello World”打印到hello.txt,并能够每2秒查看一次hello.txt更新。我可以通过运行tail -f hello.txt来实现。到目前为止,这是我尝试过的。

echo "Hello" >> hello.txt
echo "World" >> hello.txt

但是我需要在循环的每一行之后运行“ >> hello.txt”。所以我学会了运行以下命令将文本块输出到文件中

cat >> hello.txt << EOL
echo "Hello"
echo "World"
EOL

然后我应用了while循环。

while true
do
    echo >> hello.txt << EOL
    echo "Hello"
    echo "World"
    EOL
    sleep 2
done

但是随后出现以下错误。

./test.sh: line 10: warning: here-document at line 7 delimited by end-of-file (wanted `EOL')
./test.sh: line 11: syntax error: unexpected end of file

然后我尝试将文件输出放在while循环之外

echo >> hello.txt << EOL
while true
do
    echo "Hello"
    echo "World"
    sleep 2
done
EOL

但是,这打印出了实际的代码,而不是预期的代码。如何在循环中将多个行打印到文本文件,而不必在每行之后都写“ >> hello.txt”?

2 个答案:

答案 0 :(得分:1)

您可以重定向子shell的输出

while true
do
    (
    echo "Hello"
    echo "World"
    ) >> hello.txt
    sleep 2
done

答案 1 :(得分:0)

您可以使用cat代替echo。

while true
do
    cat << EOL >> hello.txt
Hello
World
EOL
    sleep 2                                                                     
done