flock -x -w 5 ~/counter.txt 'COUNTER=$(cat ~/counter.txt); echo $((COUNTER + 1)) > ~/counter.txt'
Как бы я передал несколько команд, flock
как в примере выше?
Насколько я понимаю, flock
принимает различные флаги (-x для исключительного, -w для тайм-аута), затем файл для блокировки, а затем команду для запуска. Я не уверен, как мне передать две команды в эту функцию (установить переменную с содержимым заблокированного файла, а затем увеличить этот файл).
Моя цель здесь состоит в том, чтобы создать несколько атомарный приращение для файла, блокируя его каждый раз, когда скрипт пытается получить доступ к counter.txt
файлу.
источник
Или вы можете собирать файловый дескриптор
Это также имеет то преимущество, что позволяет использовать переменную counter напрямую, в отличие от подходов, основанных на подоболочках.
источник
exec {counterfd}
? Сам Debian ошибаетсяnot found
, но возвращает 0 с перенаправлением. Очень странный.flock
Инструмент немного сложнее в использовании и страница людей довольно короткая. Страница man предоставляет три способа использования инструмента:flock [options] <file|directory> <command> [command args]
flock [options] <file|directory> -c <command>
flock [options] <file descriptor number>
То, как этот вопрос сформулирован, я бы определенно использовал третью форму
flock
. Если вы пойдете дальше на странице руководства,flock
есть несколько примеров, в которых показан точный синтаксис использования третьей формы:Я добавил
#!/bin/bash
.Я успешно использовал эту форму
flock
.источник