GNU/Linux >> Belajar Linux >  >> Linux

Apakah File Command Shuf> File Meninggalkan File Kosong, Tapi Perintah Serupa Tidak??

Pertanyaan ini sudah memiliki jawaban di sini :Mengapa `cat` file ke dalam dirinya sendiri menghapusnya? [duplikat]

(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.


Linux
  1. Tutorial Perintah Shuf Dengan Contoh Untuk Pemula

  2. Mengapa Ekspresi Reguler Bekerja Di X Tapi Tidak Di Y?

  3. Mengapa Substitusi Proses Bash Tidak Bekerja Dengan Beberapa Perintah?

  1. Bagaimana Perintah Xdg-open Mengetahui Aplikasi Yang Digunakan Untuk Membuka File?

  2. Bagaimana Perintah Sed '1!g;h;$!d' Membalikkan Isi File?

  3. Perintah "java" tidak menjalankan JVM yang telah diinstal

  1. Sedikit trik:pilih file atau baris acak di file dengan shuf

  2. Bagaimana perintah stat menghitung blok file?

  3. Perintah sed Linux tidak mengubah file target