我正在学习linux,我在读的一本书中遇到了一个问题:
以下是打印环境变量的两种不同方法。请描述一下它们的区别:
$ /usr/bin/env $ /usr/bin/strings /proc/$$/environ
我在谷歌和书中进行了搜索,我发现的所有内容都表明这两种方法都会打印出当前进程的环境变量,但是当我尝试运行它们时,我看到了差异,但我不知道为什么。
使用以下命令:
/usr/bin/env > file1
/usr/bin/strings /proc/$$/environ > file2
现在我想看到文件之间的一些差异,所以我对行进行排序并检查 file1 中的行是否出现在 file2 中,反之亦然
的结果comm -13 <(sort -u file1) <(sort -u file2)
是
当我使用时comm -13 <(sort -u file2) <(sort -u file1)
(命令来源:检查文件的所有行是否出现在不同的文件中)
答案1
从proc(5)
当前 Ubuntu 系统的手册中,描述了/proc/[pid]/environ
:
该文件包含当前正在执行的程序通过启动时设置的初始环境
execve(2)
。
由于$$
是当前 shell 的 PID,/proc/$$/environ
因此将包含当前 shell 的环境,即在执行 shell 的任何初始化文件之前启动 shell 时的外观。
该env
实用程序将以当前的方式输出环境。如果您的 shell 初始化脚本修改了环境,或者您手动将新的 shell 变量导出到环境中或取消设置环境变量,则情况可能会有所不同。
从您显示的信息中,我们可以看到当前工作目录PWD
是/home/seed
shell 启动时的目录,但您已移动到该目录/home/seed/Desktop/Lab1
来运行env
命令(首先移动到/home/seed/Desktop
,如 所示OLDPWD
)。我们还可以看到 shell 的初始化文件设置了LESSOPEN
、LESSCLOSE
、 和LS_COLORS
并修改了PATH
变量。