flock -x -w 5 ~/counter.txt 'COUNTER=$(cat ~/counter.txt); echo $((COUNTER + 1)) > ~/counter.txt'
Comment passer plusieurs commandes flock
comme dans l'exemple ci-dessus?
Pour autant que je comprends, flock
prend différents drapeaux (-x pour exclusif, -w pour timeout), puis le fichier à verrouiller, puis la commande à exécuter. Je ne sais pas comment je passerais deux commandes dans cette fonction (définir une variable avec le contenu du fichier verrouillé, puis incrémenter ce fichier).
Mon objectif ici est de créer un incrément quelque peu atomique pour un fichier en le verrouillant chaque fois qu'un script essaie d'accéder au counter.txt
fichier.
la source
Ou vous pouvez regrouper un descripteur de fichier
Cela a également l'avantage de vous permettre d'utiliser directement la variable de compteur, contrairement aux approches basées sur les sous-shells.
la source
exec {counterfd}
? À lui seul, des erreurs Debiannot found
, mais il retourne 0 avec la redirection. Très étrange.L'
flock
outil est un peu délicat à utiliser et la page de manuel est assez courte. La page de manuel propose trois façons d'utiliser l'outil:flock [options] <file|directory> <command> [command args]
flock [options] <file|directory> -c <command>
flock [options] <file descriptor number>
La façon dont cette question est formulée, j'utiliserais certainement la troisième forme de
flock
. Si vous allez plus loin dans la page de manuel,flock
il y a quelques exemples qui montrent la syntaxe exacte pour utiliser le troisième formulaire:J'ai ajouté le
#!/bin/bash
.J'ai utilisé avec succès cette forme de
flock
.la source