Bagaimana saya bisa membuat baris baru dalam for for loop in bash? Saya sudah mencoba echo -e
tetapi tidak bekerja. Ketika saya membuka file log semuanya ada dalam satu baris.
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
Apa yang saya lakukan salah? Terima kasih
bash
bash-scripting
Alexander Kim
sumber
sumber
\r\n
(Carriage Return + Newline) bukan hanya\n
(Garis baru).Jawaban:
Dalam barisan:
echo -e "\nBackup of ${i%%/} successfull" >> $logs/backups.log
Ganti Baris Baru (
\n
) dengan Pengembalian Carriage + Newline (\r\n
) untuk memastikan bahwa keduanya terjadi.Untuk info lebih lanjut, mungkin lihat pertanyaan Programmers.stackexchange.com ini: Perbedaan antara '\ n' dan '\ r \ n' , dan pertanyaan StackOverflow ini: Alasan historis di balik garis yang berbeda berakhir pada platform yang berbeda
sumber
Kamu bisa memakai
CTRL
+V
bersama lalu tekanJ
untuk menyematkan baris baru dalam pernyataan gema.Pada sistem Unix dan Linux
CTRL + V
menunjukkan bahwa karakter yang mengikuti ditafsirkan sebagai karakter kontrol.sumber
Ada berbagai versi
echo
perintah di luar sana dan versi yang berbeda dapat menangani argumen opsional mereka secara berbeda. Menggunakan argumen opsional apa pun denganecho
tidak portabel. Solusi paling sederhana adalah menambahkan yang lainecho
, seperti ini:atau seperti ini:
Atau, Anda bisa menggunakan
printf
dari padaecho
, yang disukai hari ini setidaknya untuk portabilitas.Semua solusi itu akan menempatkan baris baru di antara setiap baris, seperti konvensi Unix. Beberapa editor Windows memahami baris baru tunggal berarti end-of-line. Lainnya, seperti Notepad, tidak dan akan menampilkan file Anda sebagai satu baris.
Salah satu solusi untuk masalah itu adalah menggunakan lagi
printf
.Berlawanan dengan rekomendasi lain, yang terbaik adalah tidak mencoba menanamkan karakter kontrol literal ke dalamnya
echo
atauprintf
perintah. Mereka sulit dilihat, sulit diedit, dan mengacaukan tampilan skrip Anda jika Anda maucat
saya t.Catatan dalam semua hal di atas saya berasumsi bahwa Anda ingin istirahat baris sebelum dan sesudah catatan "berhasil" Anda. Jika itu bukan maksud Anda, modifikasi perintah itu sesuai.
sumber