/proc/pid/environ 缺少变量

/proc/pid/environ 缺少变量

谷歌今天对此不以为然,所以我求助于专家......

我目前正在编写一个脚本,该脚本依赖于 Linux (RHEL 4) 中的 /proc/pid/environ 功能来检查特定环境变量。问题是,由于某种原因,某些环境变量似乎没有显示在那里。

例子:

create some test vars:
$ export T_1=testval TEST_1=testval T=testval TESTING_LONGEST=testval

open a subshell:
$bash

$ cat /proc/self/environ|tr "\0" "\n"|grep testval
TESTVARIABLE_LONGEST=testval
T=testval

嗯...T_1 和 TEST_1 去哪儿了?什么规则主宰着这个奇怪的宇宙?

提前致谢,乔希

更新:

我已经能够在不同的 RHEL 版本和不同的用户上重现此问题,但它似乎是 Bash 独有的(我使用的是 3.0)。ksh 不会显示这种行为。

答案1

看一下Unix 上正在运行的进程的环境变量?;它指出 /proc/*/environ 在某些内核上限制为 4096 字节,并且它不会显示在该 shell 中更改的环境变量。

答案2

尝试使用strings而不是tr。 它比仅仅用换行符替换 NUL 更能找到可读的字符串。

strings /proc/$$/environ

答案3

/proc 中的某些文件不适合以小块读取。请尝试以下方法:

dd if=/proc/self/environ bs=1024k | tr "\0" "\n" | grep testval

相关内容