此外壳重定向命令中的"200"是什么?文件描述符?



什么是"200〃;在这个命令中?我想这是一个文件描述符,但为什么是200?在所有情况下,这都是一个安全的选择吗?

(
flock -s 200
# ... commands executed under lock ...
) 200>/var/lock/mylockfile

这是我从羊群人页面上抄的。

以下是我对它的编码方式。这里我只锁定对一个命令sleep 1的访问。我喜欢上面的版本,因为它支持锁定一批命令。但我想在使用它之前先了解它。

flock -x /var/lock/mylockfile sleep 1

是的,200是上述语法中的文件描述符。当用户选择要重定向的FD时;"周围路线";选择:如果200是以前放在shell内部使用的,那么shell会将其复制到不同的数字,并尊重用户的选择。因此,您只需要担心与其他用户提供的代码和工具(当然还有标准的FD——0/1/2(之间的冲突。

POSIX规范并不能保证200将是一个合法的数字——POSIX-y外壳中可寻址FD的强制数量要低得多,要低很多——但在现代系统上,这不会成为问题。

使用bash 4.1及更高版本,您可以让shell自己选择一个可用的FD。

(
exec {lock_fd}>/var/lock/mylockfile
flock -x "$lock_fd"
# commands to do with the lock held
)

最新更新