I have a bash script that makes a cURL request and writes the output to a file called resp.txt
. I need to create an exclusive lock so that I can write to that file and not worry about multiple users running the script and editing the text file at the same time.
Here is the code that I expect to lock the file, perform the request, and write to the text file:
(
flock -e 200
curl 'someurl' -H 'someHeader' > resp.txt
) 200>/home/user/ITS/resp.txt
Is this the correct way to go about this? My actual script is a bit longer than this, but it seems to break when I add the flock
syntax to the bash script.
If someone could explain how these file descriptors work and let me know if I am locking the file correctly that would be awesome!
Best Answer
This is not correct because when you do
( flock -e 200; ... ) 200> file
, you are truncating the filefile
before you get the exclusive lock. I think that you should do:to place the lock on the file opened as read only.
Note. Some shells do not support file descriptors larger than 9. Moreover the hardcoded file descriptor may already be used. With advanced shells (bash, ksh93, zsh), the following can be done: