2019-01-29 :-|
_ [bash][リダイレクト][ファイルディスクリプタ]bash のファイルディスクリプタ
exec でリダイレクトすることにより、ファイルを開きファイルディスクリプタを取得できます。bash 4.2 以降では、bash が 10 以上の番号にファイルディスクリプタを割り当ててくれます。
Redirections (Bash Reference Manual)
Each redirection that may be preceded by a file descriptor number may instead be preceded by a word of the form {varname}. In this case, for each redirection operator except >&- and <&-, the shell will allocate a file descriptor greater than 10 and assign it to {varname}.
exec {fd}>filename echo $fd exec {fd}>&-
% /bin/bash -x x.sh + exec + echo 10 10 + exec
_ [bash][ロック][flock]bash でファイルロック
こんな感じで。stackoverflow の回答では exec に ${lock_fd} を指定していますが、${lock_fd} の書き方だとシンタックスエラーになるので {lock_fd} と書かないといけない。ロックは 2 種類指定できます。
- -x で排他ロック(ライトロック)
- -s で共有ロック(リードロック)
flock したロックは、ファイルディスクリプタを閉じると勝手にアンロックされますが、明示的にアンロックするなら flock -u を書きます。
exec {lock_fd}>filename echo $lock_fd flock -x "$lock_fd" # 排他ロック flock -u "$lock_fd" exec {lock_fd}>&-
ref.
[ツッコミを入れる]