正确的方式为非交互式shell获取.bashrc文件

3

我一直在尝试解决问题,以便能够在多个节点上运行openmpi。

最初,我遇到了$PATH$LD_LIBRARY_PATH变量未从.bashrc文件中由openmpi会话更新的问题,因此我手动添加了--prefix /path/to/openmpi来解决此问题。

结果发现,甚至连anaconda路径变量也没有被加载。因此,我最终需要从我的主目录中源化~/.bashrc文件。我该怎么做?请有人能帮帮我吗?

更新01:

我编写了一个简单的shell脚本来检查python的版本。

python --version

接着我尝试在本地和远程机器上使用openmpi运行它:

mpirun --prefix /home/usama/.openmpi --hostfile hosts -np 4 bash script

它返回

Python 2.7.12
Python 3.6.8 :: Anaconda, Inc.
Python 3.6.8 :: Anaconda, Inc.
Python 2.7.12

我怀疑openmpi在运行远程进程时没有调用/设置正确的环境变量,这个猜测得到了证实。有哪位熟悉多节点openmpi的人能帮忙吗?

更新02:

一个简单的ssh环境grep告诉我,我的环境变量没有被更新,这可能是问题的原因。(我甚至已经尝试在~/.ssh/environment文件中设置它)

$ ssh remote-node env | grep -i path

看起来只加载了/etc/environment文件,并且只设置了基本路径。我该如何纠正这个问题?


你是如何尝试运行某个东西的?你确定Bash被调用了吗? - tripleee
开源MPI常见问题解答中提到,需要通过SSH连接到远程服务器来启动新进程。我猜这涉及到Bash?我遇到的错误是关于Python库在远程机器上未安装,而它们使用conda进行了安装,并且环境变量已经在.bashrc文件中设置。 - usamazf
请再次编辑您的问题,以明确说明您如何运行事情。非交互式SSH将在目标上读取$HOME/.ssh/environment,但在提出具体建议之前,我们确实需要看到完整的情况。 - tripleee
1
我会称呼“不要”为唯一适当的答案。用户通常维护.bashrc,假设它仅影响他们的交互式 shell,因此他们可以随意定义覆盖内置命令的函数,设置异常的 DEBUG 陷阱或 command_not_found 钩子,并进行其他可以使脚本表现不可预测的操作。 - Charles Duffy
1
我并没有说没有办法,我是说你所要求的方式是不明智的。最好使用单独的点文件而不是共享一个用于交互式配置的文件,或者更好的方法是生成明确设置所需值的命令。 - Charles Duffy
显示剩余6条评论
1个回答

1

也许你应该像这样运行。我猜的。 有两种方法可以帮助你!

第一:

mpirun --prefix /home/usama/.openmpi --hostfile hosts -np 4 . ~/.bashrc && bash script

第二个:

## 1. add this line to the script
. ~/.bashrc

## 2. run command as you do
mpirun --prefix /home/usama/.openmpi --hostfile hosts -np 4 bash script


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接