私の~/.bashrc
Linuxには、次のパスを追加する行がありますPATH
。
PATH=~/mydoc:~/mypython:"$PATH"
追加する目的は、~/mypython
システムのデフォルトではなく、自分でインストールしたPythonを使用することです。しかし、今私はシステムのデフォルトのPythonを使用するように変更し直したいと思います。ログアウトせずに~/mypython
値を簡単に削除する方法はありますかPATH
?
答え1
PATH=$(tr ":" "\n" <<<"$PATH" | grep -Fxv "$HOME/mypython" | paste -sd:)
答え2
シェルでパスを更新できます。
TRIM=~/mypython
export PATH=$(echo "$PATH" | sed -e "s,:$TRIM:,:," -e "s,:$TRIM\$,," -e "s,^$TRIM:,," )
これは特定の状況よりも一般的です。これは使用できます
TRIM=~/mypython
export PATH=$(echo "$PATH" | sed -e "s,:$TRIM:,:," )
TRIM
チルダ拡張値はコマンドでは拡張され~/mypython
ないため、一時変数を使用して保存します。sed
私もそうだったいいえ$HOME
(通常は同じですが)~
(チルダ)の拡張と同じ値を持つという保証がないために使用されます。HOME
必要に応じて、実際のホームディレクトリとは異なるディレクトリを設定できます(通常はそうではありません)。良いものもちろんそうしなければなりません。)
私自身の目的にはユーティリティを使用します。newpath
、例えば、
export PATH=$(newpath -r ~/mypython)
答え3
以下は、すべての極端なケースを処理するPATHコンポーネントを削除する関数です。 (空のコンポーネントを持つ邪悪なものでさえ。)
remove_from_PATH () {
while case $PATH in
"$1") unset PATH; false;;
"$1:"*) PATH=${PATH#"$1:"};;
*":$1") PATH=${PATH%":$1"};;
*":$1:"*) PATH=${PATH%%":$1:"*}:${PATH#*":$1:"};;
*) false;;
esac
do
:
done
}
remove_from_PATH ~/mypython
zshでは、arraysを使用する方が簡単ですpath
。
path=("${(@)path:#"$HOME/mypython"}")
答え4
.bashrcを変更したら、次のコマンドを実行します。
. .bashrc
これにより、.bashrcの内容が現在の環境に配置されます。