【发布时间】:2020-07-17 20:09:39
【问题描述】:
我不熟悉exec 命令。关于如何锁定文件的 bash 教程抛出了这个:
exec 200>lockfile
flock 200
...
flock -u 200
我知道它正在创建一个名为 lockfile 的文件并为其分配 FD 200。然后第二个命令锁定该文件。处理完文件后,最后一个命令将其解锁。
这样做,同一脚本的任何其他并发实例将停留在第二行,直到第一个实例解锁文件。很酷。
现在,我不明白exec 在做什么。
直接从 bash 命令行,这两个选项似乎都有效:
exec 200>lockfile
200>lockfile
但在脚本中使用第二个选项时,会引发“错误的文件描述符错误”。
为什么需要exec 来避免错误?
--- 编辑---
经过一些更“认真的研究”,我找到了答案here。 exec 命令使 FD 停留在整个脚本或当前 shell 中。
这样做:
200>lockfile flock 200
会工作的。但后来flock -u 200 会引发“Bad FD error”。
【问题讨论】:
-
手册中还说如果没有指定命令,任何重定向都在当前shell中生效。你在这里问什么?
-
@oguzismail 是试图回答吗?它没有帮助。如果你是反对者,我很高兴知道为什么,这样我就可以改进这个问题......
-
这是一条粗鲁的评论。是的,我是,我投了反对票,因为这个问题没有显示出任何认真研究的迹象。
-
在这里找到了一个很好的答案:tldp.org/LDP/abs/html/x17974.html