谷歌今天对此不以为然,所以我求助于专家......
我目前正在编写一个脚本,该脚本依赖于 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