如何动态改变不同环境的路径?

如何动态改变不同环境的路径?

我安装了不同版本的 CUDA /usr/local/cuda-...,我需要某种方法来为不同的项目选择正确的版本。

我试过

export CUDA_HOME=/usr/local/cuda-10.0
export PATH=\$CUDA_HOME/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=\$CUDA_HOME/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

但 PATH 中的变量似乎没有扩展。

我目前最好的想法是这样的:

BASEPATH=$PATH:$HOME/installed/pycharm-community-2020.2/bin
LIBBASEPATH=$LD_LIBRARY_PATH

function env100() {
    CUDA_HOME=/usr/local/cuda-10.0
    setpaths
}

function env101() {
    CUDA_HOME=/usr/local/cuda-10.1
    setpaths
}

function setpaths() {
    export PATH=$BASEPATH:$CUDA_HOME/bin
    export LD_LIBRARY_PATH=$LIBBASEPATH:$CUDA_HOME/lib64
}

但我无法想象这是做我想做的事情的最简单的方法。而且我使用它的时间还不够长,也不知道它会以何种奇怪的方式爆炸。 (编辑:首先要爆炸的是:Python virtualenvs。)

相关:我正在尝试做与这个问题类似的事情:在 bash 中设置“动态”路径的正确方法是什么? (适用于安卓 SDK)

那么,让我们听听您的建议吧!

答案1

如果没有关于您想要做什么的更多信息,就很难推荐一些东西:

  • 路径扩展是这样完成的:PATH=$PATH:$CUDA_HOME/bin:/foo/otherpath

  • .bashrc您可以创建更多用户,为每个用户环境(如果使用 bash)设置特定的 PATH export。要在用户之间切换,su username请运行 runexit以切换回来。奔跑whoami寻找方向。运行echo $SHLVL查看您所在的 shell 级别。在第一个 shell 中,SHLVL计数器 var 以 1 开头,每次su加一,exit减一。

  • PATH在 shell 脚本中设置var 而无需exporting 它。这只会更改PATH脚本运行所在的子 shell。

测试文件

#!/bin/bash
PATH=/home/foo
echo $PATH

跑步./test.sh;echo $PATH

  • 如果您使用 编译代码make,您可以添加/更改路径生成文件

相关内容