Как вывести несколько строк в файл в цикле while? - PullRequest
0 голосов
/ 14 октября 2019

Я пишу сценарий Bash и пытаюсь распечатать несколько строк вывода и распечатать их в файл. Вот то, что я пробовал до сих пор, это всего лишь пример, но очень похоже на то, что я пытаюсь выполнить.

Я пытаюсь распечатать «Hello World» в hello.txt каждые 2секунд и сможете видеть hello.txt обновленным каждые 2 секунды. Я бы сделал это, запустив 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 ]

1 голос
/ 14 октября 2019

Вы можете перенаправить вывод подоболочки

while true
do
    (
    echo "Hello"
    echo "World"
    ) >> hello.txt
    sleep 2
done
0 голосов
/ 14 октября 2019

Вы можете использовать cat вместо echo.

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