运行脚本(Bash/dash 等)时的文件描述符 10

运行脚本(Bash/dash 等)时的文件描述符 10

当脚本运行时,文件描述符10与可执行脚本的内容一起出现。

例如,脚本:

#!/bin/sh

sleep 600

当通过进程查看fd正在运行的脚本时,我看到出现了 fd10,其中包含可执行脚本本身的内容。为什么?

答案1

shell 一次读取并执行一个语句,而不是在启动时读取整个脚本。因此它需要保持与脚本的连接。

如果问题是“为什么是 10”?那么本质上这是“第一个大于 9 的 FD”。从历史上看,shell 允许您操作个位数的文件描述符,例如“exec 4>/dev/tty”。现代 shell 允许您操纵大于 9 的 FD。

当然,它可以在启动时读取所有内容,但这意味着您无法有效地将命名管道或设备等内容作为“脚本”提供。

相关内容