0

我有一个包含myenv.sh以下内容的文件 ( )

export MYVAR="HELLO"

然后我有我的程序(myhugeprogram.py):

#!/usr/bin/env python
import os
print os.environ['MYVAR']

哪个是可执行的:chmod 755 myhugeprogram.py

现在我获取我的环境:source myenv.sh

并运行我的程序:

./myhugeprogram.py
HELLO

正如预期的那样。现在我通过 SSH 以非交互方式运行它:

user1@host1:~$ ssh user2@host2 ./myhugeprogram.py
Traceback (most recent call last):
  File "./myhugeprogram.py", line 3, in <module>
    print os.environ['MYVAR']
  File "/usr/lib/python2.5/UserDict.py", line 22, in __getitem__
    raise KeyError(key)
KeyError: 'MYVAR'

这很正常,因为我没有采购myenv.sh. 现在的问题:

在通过 SSH 以非交互方式运行时,如何在执行我的 Python 脚本之前获取一个设置一些环境变量的 Bash 文件?

4

3 回答 3

3

我能想到的两种方法:

  • 在您运行的 ssh 命令中包含源命令,例如

    ssh user2@host2 "source myenv.sh; ./myhugeprogram.py"
    
  • .bashrc在文件中设置环境变量。

于 2012-04-06T10:02:35.083 回答
0

编写一个 shell 脚本包装器(在两个环境中都可见),它设置环境并调用程序以及所有参数。您可以使这个 shell 脚本变得智能,以便它只根据当前环境设置环境,因此无论您的上下文如何,您只需要调用该包装脚本,并且可以将其视为一个黑盒子。

于 2012-04-06T10:00:45.163 回答
0

您应该在脚本本身中导出/获取变量,

因为如果您打开一个 SSH 会话并触发源命令,然后使用另一个会话来执行脚本,

环境变量将不可用,因为将再次加载全新的环境。

您可以使用os.environ["ASD"] = "asd"语法为脚本设置环境变量。

于 2012-04-06T10:01:11.653 回答