(2 jawaban)
Tutup 2 tahun yang lalu.
Saya tahu ini semacam duplikat dari pertanyaan lain (Mengapa perintah sort ini memberi saya file kosong?) tetapi saya ingin memperluas pertanyaan sebagai tanggapan atas jawaban yang diberikan.
Perintah
shuf example.txt > example.txt
Mengembalikan file kosong, karena shell memotong file sebelum mengacaknya, hanya menyisakan file kosong untuk diacak. Namun,
cat example.txt | shuf > example.txt
akan menghasilkan file yang diacak seperti yang diharapkan.
Mengapa metode pipa bekerja ketika pengalihan sederhana tidak? Jika file terpotong sebelum perintah dijalankan, bukankah seharusnya metode kedua juga membiarkan file kosong?
Jawaban yang Diterima:
Masalahnya adalah > example.txt
mulai menulis ke file itu, sebelum shuf example.txt
mulai membacanya. Jadi karena belum ada keluaran, example.txt
kosong, shuf
membaca file kosong, dan sebagai shuf
tidak menghasilkan output dalam kasus ini, hasil akhir tetap kosong.
Perintah Anda yang lain mungkin mengalami masalah yang sama. > example.txt
dapat mematikan file sebelum cat example.txt
mulai membacanya; itu tergantung pada urutan shell mengeksekusi hal-hal itu, dan berapa lama waktu yang dibutuhkan cat
untuk benar-benar membuka file.
Untuk menghindari masalah seperti itu sepenuhnya, Anda dapat menggunakan shuf example.txt > example.txt.shuf && mv example.txt.shuf example.txt
.
Atau Anda bisa menggunakan shuf example.txt --output=example.txt
sebagai gantinya.