我将字符串中包含空格的变量设置为新的bash:
VAR='my variable with spaces' /bin/bash现在,如果我想在相同的环境中启动一个新的bash,我会这样做:
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
发布于 2015-04-01 21:44:42
我认为这里的答案是不使用shell脚本来设置。使用高级语言可以更容易地将/proc/<PID>/environ解析为有用的内容。下面是一个简短的示例:
#!/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的文件中,使其可执行,然后您就可以运行:
env-from <pid> bash然后,您将使用指定进程中的环境变量获得一个shell。
发布于 2021-09-21 20:56:29
只需将-L1添加到xargs (每个命令行的最大非空输入行数):
xargs -0 -L1 -a /proc/self/environ这将把每个变量放在单独的一行上,这样更容易处理。或者简单地使用
strings /proc/self/environhttps://stackoverflow.com/questions/29390624
复制相似问题