flockkilitli 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 setlockdaemontools 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 ( flockaynı zamanda istihdam edebilen, ancak bu cevapta olmayan). Biri setlockprogramı, kilitlenmesi gereken komuta zincir yükü için çağırır . setlockkendisi 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 :echoecho
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 .