我可以在这样的远程机器上运行Python脚本:
ssh -t <machine> python <script>
我也可以这样设置环境变量:
ssh -t <machine> "PYTHONPATH=/my/special/folder python <script>"
我现在想追加到远程 PYTHONPATH
并尝试
ssh -t <machine> 'PYTHONPATH=$PYTHONPATH:/my/special/folder python <script>'
但这并不起作用,因为$PYTHONPATH
无法在远程计算机上进行评估。
SuperUser上有一个非常similar question,并且接受的答案要求我创建一个由ssh
和another question解释的环境文件,可以通过创建和复制脚本来解决执行的文件而不是python
。
这是糟糕并要求目标文件系统可写(对我来说情况并非如此)!
有没有一种优雅的方法可以通过ssh
传递环境变量,或者为Python提供额外的模块路径?
答案 0 :(得分:1)
如何使用/bin/sh -c '/usr/bin/env PYTHONPATH=$PYTHONPATH:/.../ python ...'
作为远程命令?
编辑(重新评论以证明这应该做它应该给予正确引用的内容):
bash-3.2$ export FOO=bar
bash-3.2$ /usr/bin/env FOO=$FOO:quux python -c 'import os;print(os.environ["FOO"])'
bar:quux
答案 1 :(得分:1)
WFM就像这样:
$ ssh host 'grep ~/.bashrc -e TEST'
export TEST="foo"
$ ssh host 'python -c '\''import os; print os.environ["TEST"]'\'
foo
$ ssh host 'TEST="$TEST:bar" python -c '\''import os; print os.environ["TEST"]'\'
foo:bar
请注意:
'\''
模式进行转义(另一种方式是'"'"'
)在命令中避免使用$VAR
:如果我输入了例如echo "$TEST"
$ ssh host 'export TEST="$TEST:bar"; echo "$TEST"'
foo:bar
,在替换变量
一种方便的方法是将var替换为单独的命令:
var myPlayer = videojs('videoPlayer');
myPlayer.on('timeupdate', function() {
console.log(this.currentTime());
});