使用 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/$$/fd
ls
显示运行时在 shell 中仍然打开的文件描述符:三个标准描述符和zsh
终端文件描述符的副本 (10)。
制表符补全ls /proc/self/fd/
显示打开的文件描述符在那一刻对于外壳。除了 所示的内容之外ls /proc/$$/fd
,这还包括为完成本身打开的文件描述符(到/usr/share/zsh/.../functions
实现完成的文件)。