shスクリプトを介してPATHからCUDAディレクトリを削除したいと思います。ディレクトリは次のように表示されます。echo $PATH
/usr/local/cuda-9.0/bin:/usr/sbin:/usr/bin:
私はただ次が欲しい:
/usr/sbin:/usr/bin:
私のスクリプトは何も変更しませんでしたが、端末では変更されました(これを行うとスクリプトは自動的に実行されますconda deactivate
)。
export PATH=$(echo ${PATH} | sed -r 's|/usr/local/cuda-9.0/bin||')
誰かが私に理由を伝え、エレガントに修正できますか?
答え1
export PATH=$(echo ${PATH} | sed -r 's|/usr/local/cuda-9.0/bin||')
または、より正確なバージョンは次のとおりです。
export PATH="$(printf '%s\n' "$PATH" | sed 's|/usr/local/cuda-9\.0/bin||')"
$PATH
最初のエントリを削除して、コマンドを呼び出したシェルの変数の内容を更新します/usr/local/cuda-9.0/bin
。たとえば、aを望ましくないものに/bin:/opt/usr/local/cuda-9.0/bin/v2:/usr/local/cuda-9.0/bin
変更します。/bin:/opt/v2:/usr/local/cuda-9.0/bin
要素全体を削除するには、次のようにします。
export PATH="$(
printf ':%s:\n' "$PATH" |
sed '
:1
s|:/usr/local/cuda-9\.0/bin:|:|g; t1
s|^:||; s|:$|'
)"
またはzshを使用してください。
path=("${path[@]:#/usr/local/cuda-9.0/bin}")
$PATH
最初にのみ含めると、/usr/local/cuda-9.0/bin
最終結果は空になります$PATH
。そして空の$PATH
意味現在のディレクトリから実行可能ファイルを検索するあなたが望むものではありませんか?これが可能な場合は、$PATH
同様のものを作成したいかもしれません/inexistent/to/disable/PATH/lookup
。
何があっても、$PATH
コードを実行するシェルの変数のみが変更されることに注意してください。$PATH
スクリプトを呼び出すシェルの変数に影響を与えるには、対応するシェルが必要です源泉(同じ.
またはsource
コマンド)このスクリプトをdeactivate
作成するか、deactivate
機能その皮。
またはdeactivate
スクリプトを使用することができます出力これらのエントリを削除するために必要なシェルコードを削除し$PATH
(例:export -p PATH
修正後に追加)、次のように呼び出されることを確認してください。
eval "$(deactivate)"
アイテムを削除するシェルから$PATH
。
それは次のとおりです。
#! /bin/zsh -
path=("${path[@]:#/usr/local/cuda-9.0/bin}")
export -p PATH
答え2
あなたは簡単にすることができますexport PATH=/usr/sbin:/usr/bin
。しかし、あなたの方法はすでに動作しています。
$ PATH=/usr/local/cuda-9.0/bin:/usr/sbin:/usr/bin:
$ export PATH=$(echo ${PATH} | sed -r 's|/usr/local/cuda-9.0/bin||')
$ echo $PATH
:/usr/sbin:/usr/bin:
PATH
現在の環境で設定を試してください。走るスクリプトができません。