gpt4 book ai didi

linux - 使用 sed 从/proc/*/environ weirdness with\x00 获取环境变量

转载 作者:IT王子 更新时间:2023-10-29 00:20:00 34 4
gpt4 key购买 nike

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

所以我一直在尝试像这样的 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

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

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

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

我是否遗漏了一些关于 sed 的简单信息?还是我应该坚持使用这个解决方法?

最佳答案

许多用 C 编写的程序往往会因嵌入 NUL 的字符串而失败,因为 NUL 终止了 C 风格的字符串。除非专门编写来处理它。

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

xargs -n 1 -0 < /proc/pid/environ

这为您提供了每行一个环境变量。如果没有命令,xargs 只是回显参数。然后,您可以通过管道对其轻松地使用 grep、sed、awk 等。

xargs -n 1 -0 < /proc/pid/environ | sed -n 's/^ENV_VAR_NAME=\(.*\)/\1/p'

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

pidenv() 
{
xargs -n 1 -0 < /proc/${1:-self}/environ
}

如果没有提供参数,这会为您提供特定 pid 或 self 的环境。

关于linux - 使用 sed 从/proc/*/environ weirdness with\x00 获取环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3569784/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com