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

Correct way to source .bashrc for non-interactive shell

我一直在努力解决能够在多个节点上 运行 openmpi 的问题。

最初我有一个问题,$PATH$LD_LIBRARY_PATH 变量没有被 openmpi 会话从 .bashrc 文件更新,所以我手动添加 --prefix /path/to/openmpi 来解决这个问题.

事实证明,即使是 anaconda 路径变量也没有被加载。所以最终我需要从我的主目录获取 ~/.bashrc 文件。我怎样才能做到这一点?谁能帮帮我吗?

更新 01:

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

的版本
python --version

并尝试在本地和远程机器上使用 openmpi 运行 如下:

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

它returns

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

证实我的怀疑,无论 openmpi 对 运行 远程进程做什么,都不会从 ~/.bashrc 文件调用/设置适当的环境变量。使用过多节点 openmpi 的人有任何帮助吗?

更新 02:

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

$ ssh remote-node env | grep -i path

它似乎只加载了只有基本路径设置的 /etc/environment 文件。我该如何纠正?

也许你应该 运行 喜欢 this.I 猜测。 两种方式帮到你!

第一个:

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