这个 shell 重定向命令中的“200”是什么?文件描述符?

问题描述 投票:0回答:1

这个命令中的“200”是什么?我假设它是一个文件描述符,但为什么是 200?在所有情况下这都是安全的选择吗?

(
flock -s 200

# ... commands executed under lock ...

) 200>/var/lock/mylockfile

我从 flock 手册页复制了这个。

这是我的编码方式。这里我只锁定对一个命令的访问,

sleep 1
。我喜欢上面的版本,因为它支持锁定一批命令。但我想在使用它之前先了解它。

flock -x /var/lock/mylockfile sleep 1
shell file http-redirect descriptor
1个回答
2
投票

是的,

200
是上述语法中的文件描述符。当用户选择要重定向的 FD 时,shell 会“路由”该选择:如果“之前”将 200 供 shell 内部使用,那么 shell 会将其复制到不同的号码并尊重用户的选择。因此,您需要担心的唯一冲突是与其他用户提供的代码和工具(当然还有标准 FD - 0/1/2)的冲突。 POSIX 规范并不能保证

200

是一个合法的数字——POSIX-y shell 中规定的可寻址 FD 的数量要低很多,

很多
——但在现代系统上它不会是一个合法的数字。问题。 使用 bash 4.1 及更高版本,您可以让 shell 本身选择可用的 FD。

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

	
© www.soinside.com 2019 - 2024. All rights reserved.