1

Как я могу сделать новую строку в цикле в Bash? Я пытался echo -e но это не работает. Когда я открываю файл журнала, все в одной строке.

for i in */ ; do
    sitefolder="$HOME/domains/${i%%/}/public_html"
    if [ -d "$sitefolder" ]; then
        echo -e "\nBackup of ${i%%/} successfull" >> $logs/backups.log
    fi
done

Что я делаю неправильно? Спасибо

3 ответа3

1

Вы можете использовать сочетания CTRL + V а затем нажать J чтобы вставить новую строку (и) в оператор echo.

В системах Unix и Linux CTRL + V означает, что следующий символ интерпретируется как управляющий символ.

1

В соответствии:

echo -e "\nBackup of ${i%%/} successfull" >> $logs/backups.log

Замените символ новой строки (\n) символом возврата каретки + символ новой строки (\r\n), чтобы убедиться, что происходят оба.

Для получения дополнительной информации, возможно, проверьте этот вопрос Programmers.stackexchange.com: Разница между '\n' и '\r\n', и этот вопрос StackOverflow: Историческая причина различий в концах строк на разных платформах

0

Существуют разные версии команды echo , и разные версии могут по-разному обрабатывать свои необязательные аргументы. Использование любых необязательных аргументов с echo не переносимо. Самое простое решение - добавить еще одно echo , например так:

echo >> $logs/backups.log
echo "Backup of ${i%%/} successful" >> $logs/backups.log

или вот так:

{
echo
echo "Backup of ${i%%/} successful"
} >> $logs/backups.log

В качестве альтернативы, вы можете использовать printf вместо echo , что в наши дни предпочтительнее, по крайней мере, для переносимости.

printf "\nBackup of ${i%%/} successful\n" >> $logs/backups.log

Все эти решения будут помещать новые строки между каждой строкой, как и соглашение Unix. Некоторые редакторы Windows понимают, что одиночные символы новой строки означают конец строки. Другие, такие как «Блокнот», не отображают файл в виде одной строки.

Одним из решений этой проблемы является снова использовать printf .

printf "\r\nBackup of ${i%%/} successful\r\n" >> $logs/backups.log

Вопреки другим рекомендациям, лучше не пытаться встраивать буквенные управляющие символы в команды echo или printf . Их трудно увидеть, сложно редактировать, и они могут испортить отображение вашего скрипта, если вы просто cat ним.

Обратите внимание, что во всем вышесказанном я предполагал, что вы хотели разрыва строки как до, так и после вашей "успешной" заметки. Если это не было вашим намерением, измените эти команды соответствующим образом.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .