首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >字符串中包含空格的环境变量-如何在/proc/pid/environ中使用它们

字符串中包含空格的环境变量-如何在/proc/pid/environ中使用它们
EN

Stack Overflow用户
提问于 2015-04-01 20:17:37
回答 2查看 2.1K关注 0票数 2

我将字符串中包含空格的变量设置为新的bash:

代码语言:javascript
复制
VAR='my variable with spaces' /bin/bash

现在,如果我想在相同的环境中启动一个新的bash,我会这样做:

代码语言:javascript
复制
ENV=$(cat /proc/self/environ | xargs -0 | grep =)
env -i - $ENV /bin/bash

但问题是,在/proc/self/environ中,这个变量没有引号。所以最后一个命令抛出一个:env: variable: No such file or directory

我该如何绕过这个限制呢?

PS:这是以下问题的简化版本:https://github.com/jpetazzo/nsenter/issues/62

EN

回答 2

Stack Overflow用户

发布于 2015-04-01 21:44:42

我认为这里的答案是不使用shell脚本来设置。使用高级语言可以更容易地将/proc/<PID>/environ解析为有用的内容。下面是一个简短的示例:

代码语言:javascript
复制
#!/usr/bin/python

import os
import sys
import argparse


def parse_args():
    p = argparse.ArgumentParser()
    p.add_argument('pid')
    p.add_argument('command', nargs=argparse.REMAINDER)
    return p.parse_args()


def main():
    args = parse_args()

    env = {}
    with open('/proc/%s/environ' % args.pid) as fd:
        for envspec in fd.read().split('\000'):
            if not envspec:
                continue

            varname, varval = envspec.split('=', 1)
            env[varname] = varval

    print env
    os.execvpe(args.command[0], args.command, env)


if __name__ == '__main__':
    main()

将此代码放在一个名为env-from的文件中,使其可执行,然后您就可以运行:

代码语言:javascript
复制
env-from <pid> bash

然后,您将使用指定进程中的环境变量获得一个shell。

票数 2
EN

Stack Overflow用户

发布于 2021-09-21 20:56:29

只需将-L1添加到xargs (每个命令行的最大非空输入行数):

代码语言:javascript
复制
xargs -0 -L1 -a /proc/self/environ

这将把每个变量放在单独的一行上,这样更容易处理。或者简单地使用

代码语言:javascript
复制
strings /proc/self/environ
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29390624

复制
相关文章

相似问题

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