bash中的python:os.environ行为

时间:2017-04-24 08:35:22

标签: python linux bash

根据voithos's answeros.environ可以设置环境变量,子进程自动从父进程继承。

但是,请将以下内容与案例进行比较

第一种情况,在python交互模式下

>>>import os
>>>os.environ['a']='1'
>>>os.system('echo $a')
1
0

结果很好。

第二种情况,在bash脚本中

#!/bin/bash
python3 - <<EOF
import os
os.environ['a']='1'
os.system('echo $a')
EOF

将上述内容保存为test.bash并运行bash test.bash我们什么都没得到!

为什么在第二种情况下,os.system不会继承变量?

摘要

默认情况下,bash here文档中的任何美元符号$都会被展开,无论它是否在单引号内。

一种方法是使用反斜杠$转义\,例如\$

还有另一种方法可以避免这种扩展,即单引号引用第一个doc分隔符,比较以下

a=0

python3 - <<here
import os
os.environ['a']='1'
os.system('echo $a')
here

python3 - <<'here'
import os
os.environ['a']='1'
os.system('echo $a')
here

1 个答案:

答案 0 :(得分:1)

@ChristosPapoulas说的是对的。当你输入时,shell会对$a进行评估。$a永远不会进入你的python解释器。这可以在以下内容中看到:

$ cat >/tmp/foo <<EOF
> import os
> os.environ['a'] = '1'
> os.system('echo $a')
> EOF
$ cat /tmp/foo
import os
os.environ['a'] = '1'
os.system('echo ')
$