flock -x -w 5 ~/counter.txt 'COUNTER=$(cat ~/counter.txt); echo $((COUNTER + 1)) > ~/counter.txt'
Como eu passaria vários comandos para flock
o exemplo acima?
Tanto quanto eu entendo, flock
leva sinalizadores diferentes (-x para exclusivo, -w para tempo limite), depois o arquivo a ser bloqueado e o comando a ser executado. Não tenho certeza de como passaria dois comandos para essa função (defina a variável com o conteúdo do arquivo bloqueado e depois incremente esse arquivo).
Meu objetivo aqui é criar um incremento atômico para um arquivo, bloqueando-o toda vez que um script tenta acessar o counter.txt
arquivo.
fonte
Ou você pode reunir um descritor de arquivo
Isso também tem o benefício de permitir que você use a variável counter diretamente, ao contrário das abordagens baseadas em subshell.
fonte
exec {counterfd}
? Por si só, o Debian errosnot found
, mas retorna 0 com o redirecionamento. Muito estranho.A
flock
ferramenta é um pouco complicada de usar e a página de manual é bastante curta. A página do manual fornece três maneiras de usar a ferramenta:flock [options] <file|directory> <command> [command args]
flock [options] <file|directory> -c <command>
flock [options] <file descriptor number>
Como esta pergunta está formulada, eu definitivamente usaria a terceira forma de
flock
. Se você for mais adiante na página de manual,flock
há alguns exemplos que mostram a sintaxe exata para usar o terceiro formulário:Eu adicionei o
#!/bin/bash
.Eu tenho usado com sucesso este formulário de
flock
.fonte