Saya menjalankan skrip shell yang menulis ke file.
Script ini mungkin membutuhkan waktu lama untuk diselesaikan dan saya ingin memantau output parsial daripada menunggu seluruh script selesai.
Apakah aman untuk membuka (mengklik dua kali) file yang sedang ditulis oleh skrip?
linux
command-line
bash
filesystems
bash-scripting
Tidak ada
sumber
sumber
Jawaban:
Membaca file itu aman, meskipun mengklik dua kali yang Anda sebutkan mungkin akan membuka file di beberapa editor yang akan menawarkan Anda opsi untuk membuat perubahan dan menyimpannya. Missclicks terjadi, jadi saya merekomendasikan perintah yang bahkan tidak akan membiarkan Anda mengubah file.
Ini adalah contoh yang bekerja di terminal; mereka hanya akan membaca file:
sumber
Selama Anda tidak menulis untuk itu, itu tidak apa-apa.
Namun, saya akan merekomendasikan menggunakan
di terminal lain.
Perintah ini akan "mengikuti" file
log_file
dan menulis konten yang baru ditambahkan segera setelah diperbarui oleh skrip.sumber
Tidak cukup perwakilan untuk menambahkan komentar pada jawaban Kamil Maciorowski:
Untuk beberapa file, Anda ingin
tail -F file
agar yang berikut ini berlanjut melalui rotasi. Menonton syslog misalnya.sumber
Jika skrip (atau implementasi kerangka kerja yang mendasarinya) berulang kali membuka dan menutup pegangan file selama pekerjaannya, skrip tersebut mungkin mengalami kesalahan pelanggaran berbagi dalam mode penulisan berikutnya yang terbuka karena alasan berikut:
1) Skrip dapat meminta penulisan akses dalam mode eksklusif (tidak termasuk akses baca bersamaan), jadi jika program editor file / pemirsa Anda bahkan hanya membaca file, itu dapat memicu kesalahan dalam skrip penulisan.
2) Selain itu, beberapa editor / pemirsa file mengunci file selama seluruh durasi file dibuka.
Sebagai kesimpulan, ada beberapa masalah yang mungkin bergantung pada program yang Anda gunakan untuk melihat file. Dan ada kemungkinan masalah yang timbul dari implementasi (atau kerangka kerja yang mendasari) dari skrip yang menulis ke file.
sumber
tail -f
atauless +F
rutin.