Quelqu'un peut-il expliquer comment utiliser les descripteurs de flock et de file pour verrouiller un file et écrire dans le file verrouillé?

Nus avec moi comme je suis nouveau à l'outil de flock et je n'ai pas utilisé les descripteurs de files dans la mesure où je sais.

J'ai un script bash qui crée une requête cURL et écrit la sortie dans un file appelé resp.txt . J'ai besoin de créer un verrou exclusif afin que je puisse écrire dans ce file et ne pas s'inquiéter de plusieurs users exécutant le script et éditant le file text en même time.

Voici le code que je count verrouiller le file, effectuer la requête et écrire dans le file text:

 ( flock -e 200 curl 'someurl' -H 'someHeader' > resp.txt ) 200>/home/user/ITS/resp.txt 

Est-ce la bonne façon de procéder? Mon script actuel est un peu plus long que cela, mais il semble se casser lorsque j'ajoute la syntaxe flock au script bash.

Si quelqu'un pouvait expliquer comment ces descripteurs de files fonctionnent et faites-moi savoir si je verrouille correctement le file qui serait génial!

Ce n'est pas correct parce que lorsque vous faites ( flock -e 200; ... ) 200> file , vous tronquez le file avant d'get le verrou exclusif. Je pense que vous devriez faire:

 touch resp.txt ( flock -e 200 curl 'someurl' -H 'someHeader' > resp.txt ) 200< resp.txt 

pour placer le verrou sur le file ouvert en lecture seule.

Remarque. Certains shells ne prennent pas en charge les descripteurs de files supérieurs à 9. De plus, le descripteur de file codé en dur peut déjà être utilisé. Avec des shells avancés (bash, ksh93, zsh), on peut faire ce qui suit:

 touch resp.txt ( unset foo exec {foo}< resp.txt flock -e $foo curl 'someurl' -H 'someHeader' > resp.txt )