我想用Python脚本设置一个环境变量,影响我启动脚本的shell。这就是我的意思
python -c "import os;os.system('export TESTW=1')"
但命令
echo ${TESTW}
什么都不返回。还有表达式
python -c "import os;os.environ['TEST']='1'"
它不起作用。
还有另一种直接意义上的方法吗?或者将变量写入我从Python脚本的“外部”执行的文件中是否更好?
答案 0 :(得分:1)
您可以通过以下方式影响环境:putenv但它不会影响来电环境,只会影响分叉儿童的环境。 在启动python脚本之前设置环境要好得多。
我可以提出这样的变体。您创建一个bash脚本和一个python脚本。在bash脚本中,您使用params调用python脚本。一个参数 - 一个env变量。例如:
#!/bin/bash
export TESTV1=$(python you_program.py testv1)
export TESTV2=$(python you_program.py testv2)
和you_program.py testv1
仅为一个env变量返回值。
答案 1 :(得分:0)
我强烈建议使用chepner和Maxym提出的解决方案(Python脚本提供值,shell导出变量)。如果这不是您的选择,您仍然可以使用eval
来执行python脚本在当前Bash进程中写入的内容:
eval $( python -c "print('export TESTW=1')" )
警告:eval
通常是阅读"邪恶"在Bash编程中。作为一般经验法则,应该避免盲目地"执行完全不在一个人控制之下的代码。这包括在运行时由另一个程序生成,如本例所示。另请参阅Stack Overflow问题 Why should eval be avoided in Bash, and what should I use instead? 。