GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana Urutan Eksekusi Di Shell Karena Berkaitan Dengan Pengalihan Menjadi Marah Sekitar 1 Waktu Dari 1000 Pada Sistem?

Mempertimbangkan T&J ini tentang urutan eksekusi di shell yang terkait dengan pengalihan, dan terlepas dari kenyataan bahwa jika file tidak ada, file akan dibuat terlebih dahulu sehingga cat example.txt | shuf > example.txt tidak mengeluh bahwa file tidak ada - yang hanya mengkonfirmasi urutan dari apa yang saya mengerti - lalu mengapa sekitar sekali setiap seribu kali di sistem saya, shuffle berfungsi ketika saya melakukan ini (cadangan masing-masing berisi 15 nilai statis di baris mereka)

for i in $(seq 1 1000); do
    cp backup test
    echo $i
    cat test | shuf > test
    cat test
done

Bagaimana mungkin ada pengecualian terhadap aturan tersebut?

Jawaban yang Diterima:

Di sini:

cat test | shuf > test

> diutamakan dalam arti bahwa ini berarti:

(cat test) | (shuf > test) 

dan bukan:

(cat test | shuf) > test

Meskipun jika kami menggunakan dua file yang berbeda, tidak akan ada perbedaan antara kedua pengelompokan ini.

Apa yang menjadi signifikan ketika Anda menggunakan file yang sama adalah bahwa dua perintah di kedua sisi pipa dijalankan secara bersamaan . Perintah tersebut adalah cat test dan shuf > test . > berarti “terbuka untuk menulis dan memotong”, sedangkan cat akan "membuka untuk membaca", membaca, dan menutup. Karena kedua hal itu terjadi bersamaan , hubungan antara urutan operasi kolektif mereka tak tentu . Ada kemungkinan cat akan bisa menyeruput file sebelum shell mengelola shuf > test memotongnya. Tapi itu peluang tipis, karena ada lebih banyak yang terlibat; itu hanya akan terjadi jika cat sangat beruntung dalam kaitannya dengan penjadwalan shuf > test .

Moral cerita: Jangan lakukan ini — gunakan dua file saja.


Linux
  1. Cara Mengubah Shell Default Di Linux

  2. Dapatkan waktu eksekusi program di shell

  3. Atur waktu waktu eksekusi beberapa perintah

  1. Linux – Bagaimana Cara Mengetahui Hard Disk Apa yang Ada di Sistem?

  2. Bagaimana cara mengetahui hard disk apa yang ada di sistem?

  3. Bagaimana cara mengetahui detail tentang perangkat keras pada mesin Linux?

  1. Bagaimana Cara Menangkap Status Pengembalian Dan Menggunakan Tee Pada Saat Yang Sama Di Korn Shell??

  2. Bagaimana Cara Cat File Dari Awk?

  3. Bagaimana Cara Membuat Bilah Aktivitas Gnome Shell Kecil Sepanjang Waktu?