“ exec {fd} </ dev / watchdog”在Bash中做什么


Answers:


34

不必选择文件描述符并希望它可用:

exec 4< /dev/watchdog  # Was 4 in use? Who knows?

该符号要求外壳程序选择当前不使用的文件描述符,打开文件以在该描述符上读取,然后将数字分配给给定的变量(fd)。

$ exec {fd}< /dev/watchdog
$ echo $fd
10

我确定您是对的,因为(1)我记得在某处阅读过它,并且(2)我只是尝试过它(并且它可以工作)。但是我找不到任何地方的文档。(当然,在您发布答案之前,我只有不到十分钟的搜索时间。)您能否提供有关该文档记录位置的参考?
斯科特,

2
请参见手册页,本节第二段REDIRECTIONS。因为他们没有给出明确的示例,所以它并没有真正吸引您。
chepner

您是对的,我没看过,但它在您所说的地方。应当指出的是,任何文字,而不仅仅是FD将在括号工作,它分配一个FD> = 10
格雷格·利文撒尔

3
@Scott,不仅在bash中使用,而且仅在bash 4.1或更高版本中使用(因此在仍在MacOS上使用的3.2版本中不可用)。
查尔斯·达菲

2
但是,@ CharlesDuffy /dev/watchdog在Mac OS X上也不存在。这是特定于Linux的设备。
duskwuff

11

表格:

{var}<filename

使shell打开文件filename以读取并在变量中存储文件描述符号var{var}和重定向运算符之间不允许有空格,并且文件描述符号将大于或等于10

此功能是从原ksh(从2006年的版本ksh93r),bash后来在大量复制它bash-4.1-alpha从2010年开始zsh也比早期的变化bash,从zsh 4.3.42007年的。


2

Bash手册中有关重定向的部分对此进行了说明。

可以在文件描述符号之后进行的每个重定向都可以在其后加上{ varname } 形式的单词。在这种情况下,对于>&-和之外的每个重定向运算符<&-,shell都会分配一个大于10的文件描述符,并将其分配给{ varname }。如果>&-<&-前面带有 { varname },则varname的值定义要关闭的文件描述符。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.