Você poderia usar "sh -c command ..." para executar o comando shell inteiro, incluindo o redirecionamento de arquivos, com o bloqueio travado. Além disso, como você está usando o arquivo como um contador, você precisa manter o bloqueio continuamente enquanto faz a leitura e a gravação de volta. Então você gostaria de fazer algo assim para incrementar o contador e retornar seu novo valor:
flock --exclusive --wait 5 /dev/shm/counter.txt sh -c 'read count < /dev/shm/counter.txt ; echo $((count + 1)) > /dev/shm/counter.txt ; echo $((count + 1))'
Alterar os sinais de mais para sinais de menos deve diminuir o contador:
flock --exclusive --wait 5 /dev/shm/counter.txt sh -c 'read count < /dev/shm/counter.txt ; echo $((count - 1)) > /dev/shm/counter.txt ; echo $((count - 1))'
Espero que você inicialize o contador antes que qualquer contenção possa ocorrer. Portanto, não é necessário se preocupar com o bloqueio antecipado:
echo 0 > /dev/shm/counter.txt
Eu não acho que você precisaria estragar o valor do contador enquanto a contenção poderia ocorrer, mas, se você o fez, você deve fazer assim:
flock --exclusive --wait 5 /dev/shm/counter.txt sh -c 'echo 0 > /dev/shm/counter.txt'
Acho que você entende como fazer a leitura, mas incluo isso para ser completo:
flock --shared /dev/shm/counter.txt cat /dev/shm/counter.txt