在 Z shell 中使用https://unix.stackexchange.com/a/274499/5132的答案中的机制:
(
flock -x 200
echo "test";
) 200>mylockfile2
Run Code Online (Sandbox Code Playgroud)
回报
zsh: parse error near `200'
Run Code Online (Sandbox Code Playgroud)
在 bash 中它可以正常工作。这里可能有什么问题?
Bash 是唯一允许用户使用普通重定向语法直接打开大于 9 的 fd 的 shell。所以在其他 shell 中该命令相当于(...) 200 1>mylockfile2,这是一个语法错误。posix 仅强制要求支持 0-9。如果您确实想确保与锁一起使用的 fd 尚未被使用,您可以使用专门设计的语法来打开下一个可用的 fd。
(foo "$lockfd";...) {lockfd}>file