PATHから追加されたパスを削除しますか?

PATHから追加されたパスを削除しますか?

私の~/.bashrcLinuxには、次のパスを追加する行があります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"}")

気づくPATH修正しないでください.bashrc

答え4

.bashrcを変更したら、次のコマンドを実行します。

 . .bashrc

これにより、.bashrcの内容が現在の環境に配置されます。

関連情報