さまざまな環境に合わせてパスを動的に変更する方法は?

さまざまな環境に合わせてパスを動的に変更する方法は?

さまざまなバージョンの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で「動的」パスを設定する正しい方法は何ですか? (Android SDKに適用可能)

それではあなたの提案を聞きましょう!

答え1

やりたいことに関する追加情報がなければ、何かを推薦するのは難しいです。

  • パス拡張は次のように実行されます。PATH=$PATH:$CUDA_HOME/bin:/foo/otherpath

  • .bashrc各ユーザーエクスペリエンスに特定のPATHを設定して、より多くのユーザーを作成できます(bashを使用している場合)export。ユーザーを切り替えるには、su usernamerunを実行してexitもう一度切り替えます。whoami方向を見つけるために走ります。実行して、echo $SHLVL現在のシェルレベルが何であるかを確認します。最初のシェルでは、SHLVLカウンタ var は 1 で始まり、毎回 1 ずつsu増減します。exit

  • PATHexportingなしでシェルスクリプトでvarを設定します。これはPATHスクリプトが実行されるサブシェルのみを変更します。

テストファイル

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

走る./test.sh;echo $PATH

  • コンパイルされたコードを使用している場合は、makeパスを追加/変更できます。ファイルの生成

関連情報