/proc/self/fd/ 的 tab 补全显示与列出的内容相比不同的补全

/proc/self/fd/ 的 tab 补全显示与列出的内容相比不同的补全

使用 zsh,如果我尝试使用 Tab 键补全以下命令ls /proc/self/fd/,则会看到以下内容:

files
0@   1@   10@  11@  12@  13   2@   3

但是,当我按 Enter 键(未完成)时,我看到:

> ls /proc/self/fd/
0  1  2  3

如果我列出当前 shell 的文件描述符,我会得到不同的结果:

> ls /proc/$$/fd/
0  1  10  2

为什么这三个结果不同呢?

答案1

让我们从ls /proc/self/fd: 开始,它显示了为进程打开的文件描述符ls。这是三个标准输入、输出和错误描述符,目录的描述符ls正在读取。

ls /proc/$$/fdls显示运行时在 shell 中仍然打开的文件描述符:三个标准描述符和zsh终端文件描述符的副本 (10)。

制表符补全ls /proc/self/fd/显示打开的文件描述符在那一刻对于外壳。除了 所示的内容之外ls /proc/$$/fd,这还包括为完成本身打开的文件描述符(到/usr/share/zsh/.../functions实现完成的文件)。

相关内容