flock
kilitli işlemlerin yollarından biridir. Yardımcı program util-linux araç setinin bir parçasıdır ve yalnızca Linux için kullanılabilir. Daha geniş bir platform yelpazesinde bulunan diğer yardımcı programlar, Daniel J. Bernstein'ın setlock
daemontools paketindeki faydası etrafındadır :
setlock
Daemontools'tan
setlock
Bruce Guenter'in daemontools-encore sitesinden
s6-setlock
Laurent Bercot'un s6'sından
chpst
Gerrit Pape'in runitinden
runlock
Wayne Marshall'ın perpinden
setlock
benim nosh araç setimden
Bu araçlar, M. Kurenkov'un cevabında kullanılandan biraz farklı bir paradigma ile çalışır ( flock
aynı zamanda istihdam edebilen, ancak bu cevapta olmayan). Biri setlock
programı, kilitlenmesi gereken komuta zincir yükü için çağırır . setlock
kendisi kilit dosyasını açar ve kilitler ve işleminde açık olması için bir dosya tanımlayıcı bırakır. Kilit, bu işlem devam ettiği sürece devam eder (sonraki komut açık dosya tanımlayıcısını bulup kapatarak kilidi açıkça serbest bırakmazsa).
Söz konusu durumda , bir kabuk yerleşik komutu yerine harici bir çağrı başlattığının farkında olarak, çıktı satırını üreten komutu birbirine kenetlemek gerekir :echo
echo
setlock mylockfile echo "$ RESULT" >> ./$TEMP_DIR/$OUT_FILE
Bu durumda, çıktı dosyasının ekleme modunda açılıp kapatılması gerekli değildir. Öyle olsaydı, bir benzeri programları kullanarak ya gerektirmektedir kilidi, içinde bu dosyayı açmak zorunda kalacak fdredir
/ redirfd
:
setlock mylockfile fdredir - uygulama 1 "./$TEMP_DIR/$OUT_FILE" echo "$ RESULT"
hangisi isterse kabuk işlevine dönüşebilir:
outfile () {setlock mylockfile fdredir --ekkat 1 "./$TEMP_DIR/$OUT_FILE" "$ @"; }
[…]
Outfile echo "$ RESULT"
veya kabuk sözdizimine bağlı kalmak ve kilit altında çalışan ikinci bir kabuk tarafından yorumlanmasını sağlamak, kabuk değişkenleri ortam değişkenleri olarak dışa aktarılmazsa önemsiz bazı alıntılar yapılmasını gerektirir:
setlock mylockfile sh -c 'echo' "$ RESULT" '>> "./'$TEMP_DIR'/'$OUT_FILE'" '
Bu elbette çıktı dosyalarına yazmaktan başka şeyler hakkında genelleme yapar:
setlock mylockfile sh -c '… kilitli; şey …'
`pwd`
; sadece bir nokta (.
) kullanabilirsiniz. Ayrıca , değişkenler içerdiği için tüm dosya adını belirtmelisiniz .