URLと出力マークダウンファイルを受け入れ、そのURLといくつかのメタデータをそのファイルの最後に追加するシェルスクリプトを作成したいと思います。このスクリプトが同時に呼び出され、結果としてecho $some_multiline_thing >> file
s。
これにより 質問 、これにより、破損したデータがfile
に書き込まれる可能性があります。追加の書き込みがすべてアトミックに行われるように、書き込みを同期するにはどうすればよいですか? (アペンドの順序は私には関係ありません。)
更新:中途半端な解決策が見つかりました
function sync-append() {
local file="$1"
local text="$2"
local lock_fd
{
exec {lock_fd}>>$file
flock -x "$lock_fd"
echo "$text" >> $file
} always {
exec {lock_fd}>&-
}
}
このソリューションは、zshのalways
に依存しています。これは、(たとえば、kill -9
)。
ただやる:
{
flock 1 &&
echo something
} >> "$file"
いずれにしてもプロセスがなくなるとロックは失われるので、kill -s KILL
について心配する必要はありません。