flock
adalah salah satu cara operasi yang saling terkait. Utilitas adalah bagian dari tool util-linux dan hanya tersedia untuk Linux. Utilitas lain, tersedia di berbagai platform yang lebih luas, didasarkan pada setlock
utilitas Daniel J. Bernstein dari paket daemontools:
Alat-alat ini beroperasi dengan paradigma yang sedikit berbeda dengan yang digunakan dalam jawaban M. Kurenkov (salah satunya) flock
juga dapat digunakan, tetapi tidak dalam jawaban itu). Satu memanggil setlock
program untuk memuat rantai ke perintah yang harus saling bertautan. setlock
itu sendiri membuka dan mengunci file kunci, dan meninggalkan deskriptor file untuk itu terbuka dalam prosesnya. Kunci tetap ada selama proses itu berlangsung (kecuali perintah berikutnya dirantai untuk secara eksplisit melepaskan kunci dengan menemukan dan menutup deskriptor file terbuka).
Untuk kasus dalam pertanyaan, seseorang harus mengaitkan perintah yang menghasilkan garis keluaran, dengan menyadari bahwa ini memanggil sebuah eksternal echo
sebagai pengganti shell bawaanecho
:
setlock mylockfile echo "$ RESULT" >> ./$TEMP_DIR/$OUT_FILE
Dalam hal ini tidak perlu saling mengunci membuka file output dalam mode append. Jika ya, seseorang harus membuka file itu di dalam kunci, yang mengharuskan baik menggunakan program sepertifdredir
/ redirfd
:
setlock mylockfile fdredir --append 1 "./$TEMP_DIR/$OUT_FILE" echo "$ HASIL"
yang mana dapat berubah menjadi fungsi shell jika diinginkan:
outfile () {setlock mylockfile fdredir --append 1 "./$TEMP_DIR/$OUT_FILE" "$ @"; }
[...]
outfile echo "$ HASIL"
atau bertahan dengan sintaks shell dan menafsirkannya dengan shell kedua yang berjalan di bawah interlock, memerlukan beberapa kutipan non-sepele jika variabel shell seseorang tidak diekspor sebagai variabel lingkungan:
setlock mylockfile sh -c 'echo' "$ HASIL" '>> >> ./'$TEMP_DIR'/'$OUT_FILE' "'
Ini tentu saja menggeneralisasi hal-hal selain menulis ke file output:
setlock mylockfile sh -c '... saling bertautan; barang ... '
`pwd`
; Anda bisa menggunakan titik (.
). Anda juga harus mengutip seluruh nama file karena menyertakan variabel .