首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用sed从/proc/*/environ中获取一个env var

使用sed从/proc/*/environ中获取一个env var
EN

Stack Overflow用户
提问于 2010-08-26 04:03:59
回答 5查看 11.5K关注 0票数 19

我正在尝试通过一些其他进程环境来获取特定的env var。

所以我一直在尝试sed命令,如下所示:

sed -n "s/\x00ENV_VAR_NAME=\([^\x00]*\)\x00/\1/p" /proc/pid/environ

但是我得到了完整的环境文件作为输出。如果我只用一个静态字符串替换\1,我会得到该字符串加上整个环境文件:

sed -n "s/\x00ENV_VAR_NAME=\([^\x00]*\)\x00/BLAHBLAH/p" /proc/pid/environ

我应该在最后一个例子中听到“胡言乱语”。如果我去掉空字符并使用其他测试数据集,就不会发生这种情况。

这导致我尝试将\x00转换为\x01,这似乎确实有效:

cat /proc/pid/environ | tr '\000' '\001' | sed -n "s/\x01ENV_VAR_NAME=\([^\x01]*\)\x01/\1/p"

我是不是遗漏了关于sed的一些简单的东西?或者我应该坚持使用这个变通方法?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-08-26 04:26:45

您可以使用gawk处理列表,将记录分隔符设置为\0,将字段分隔符设置为=

代码语言:javascript
运行
复制
gawk -v 'RS=\0' -F= '$1=="ENV_VAR_NAME" {print $2}' /proc/pid/environ

或者,您可以在循环中使用read来读取每个NUL分隔的行。例如:

代码语言:javascript
运行
复制
while read -d $'\0' ENV; do declare "$ENV"; done < /proc/pid/environ

echo $ENV_VAR_NAME

(在子shell中执行此操作,以避免破坏您自己的环境。)

票数 12
EN

Stack Overflow用户

发布于 2010-08-26 07:34:14

许多用C编写的程序在使用嵌入NUL的字符串时往往会失败,因为NUL会终止C样式的字符串。除非专门写来处理它。

我在命令行上使用xargs处理/proc/*/environ:

代码语言:javascript
运行
复制
xargs -n 1 -0 < /proc/pid/environ

这为您提供了每行一个env var。如果没有命令,xargs只会回显参数。然后,您可以通过管道将grep、sed、awk等命令轻松地传递给它。

代码语言:javascript
运行
复制
xargs -n 1 -0 < /proc/pid/environ | sed -n 's/^ENV_VAR_NAME=\(.*\)/\1/p'

我经常使用它,所以我有一个shell函数用于它:

代码语言:javascript
运行
复制
pidenv() 
{ 
    xargs -n 1 -0 < /proc/${1:-self}/environ
}

这将为您提供特定pid的环境,如果未提供参数,则为self。

票数 33
EN

Stack Overflow用户

发布于 2015-09-18 05:35:20

代码语言:javascript
运行
复制
cat /proc/PID/environ  | tr '\0' '\n' | sed 's/^/export /' ; 

然后根据需要进行复制和粘贴。

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3569784

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档