flock
jest jednym ze sposobów blokowania operacji. Narzędzie to jest częścią zestawu narzędzi util-linux i jest dostępne tylko dla systemu Linux. Inne narzędzia, dostępne na szerokiej gamie platform, są oparte na setlock
użyteczności Daniela J. Bernsteina z jego pakietu daemontools:
Narzędzia te działają z nieco innym paradygmatem niż ten zastosowany w odpowiedzi M. Kurenkowa (taki, który flock
może również zastosować, ale nie ma w tej odpowiedzi). Wywołuje się setlock
program, aby powiązać obciążenie z poleceniem, które musi być zablokowane. setlock
sam się otwiera i blokuje plik blokady i pozostawia deskryptor pliku dla niego otwarty w trakcie procesu. Blokada trwa tak długo, jak trwa ten proces (chyba że kolejne polecenie powiązane w celu jawnego zwolnienia blokady przez znalezienie i zamknięcie deskryptora otwartego pliku).
W tym przypadku należy zablokować polecenie, które tworzy linię wyjściową, mając świadomość, że wywołuje to polecenie zewnętrzne echo
zamiast wbudowanego echo
polecenia powłoki :
echo pliku blokującego setlock „$ RESULT” >> ./$TEMP_DIR/$OUT_FILE
W takim przypadku nie jest konieczne blokowanie otwierania pliku wyjściowego w trybie dołączania. Gdyby tak było, należałoby otworzyć ten plik w zamku, co wymaga użycia programów takich jak fdredir
/ redirfd
:
setlock mylockfile fdredir --append 1 "./$TEMP_DIR/$OUT_FILE" echo "$ RESULT"
który można zmienić w funkcję powłoki, jeśli chce się:
outfile () {setlock mylockfile fdredir --append 1 "./$TEMP_DIR/$OUT_FILE" "$ @"; }
[…]
Echo wyjściowe „$ RESULT”
lub trzymanie się składni powłoki i interpretowanie jej przez drugą powłokę działającą pod blokadą, wymagającą nietrywialnego cytowania, jeśli zmienne powłoki nie są eksportowane jako zmienne środowiskowe:
setlock mylockfile sh -c 'echo' "$ RESULT" '>> "./'$TEMP_DIR'/'$OUT_FILE'"
To oczywiście uogólnia na rzeczy inne niż pisanie do plików wyjściowych:
setlock mylockfile sh -c '… zablokowane; rzeczy…
`pwd`
; możesz po prostu użyć kropki (.
). Powinieneś także zacytować całą nazwę pliku, ponieważ zawiera on zmienne .