Bash:获取脚本时如何阅读脚本

Bash:获取脚本时如何阅读脚本

当 bash 执行脚本时,ls -la /proc/<pid of bash>/fd显示“255 -> /path/to/script”。我认为 bash 通过文件描述符 255 读取脚本,并逐行执行命令。

但是当 bash 获取脚本时,我在ls -la /proc/<pid of bash>/fd.我也找不到cat /proc/<pid of bash>/maps

我有一个问题:当bash获取脚本时,bash如何读取脚本?有什么特殊的方法来读取脚本文件吗?

答案1

我突然想出一个主意来分析形势strace

刚执行时,输出strace -f -p <pid>如下:

openat(AT_FDCWD, "./test", O_RDONLY) = 3

...

[pid 3408] dup2(3, 255) = 255

[pid 3408] 关闭(3) = 0

“test”是要执行的shell脚本。 “3408”是子shell的pid。 “test”在文件描述符 3 处打开,并复制到文件描述符 255。因此ls -la /proc/<pid of bash>/fd显示“255 -> /some/directory/test”。

但是,当获取脚本时,“测试”被打开,读入缓冲区,然后立即关闭。所以ls -la /proc/<pid of bash>/fd不显示上面这样的条目。

我不知道bash为什么要这样实现。

相关内容