背景
Linuxの.bashrcで設定してしまった、特定のPATH, LD_LIBRARY_PATHを削除したいときがある。
unset等を使うことで、削除できるが、ターミナルを切り替えると、PATH, LD_LIBRARY_PATHが復活してしまうため、なんとかならないか、、、
方法
・nanoエディタを開く
sudo nano ~/.bashrc
・.bashrcの末尾に以下を追加
・その後ctrl+o からの enter で保存し、ctrl+x で閉じる。
path_remove () { export PATH=`echo -n $PATH | awk -v RS=: -v ORS=: '$0 != "'$1'"' | sed 's/:$//'`; }
lib_path_remove () { export LD_LIBRARY_PATH=`echo -n $LD_LIBRARY_PATH | awk -v RS=: -v ORS=: '$0 != "'$1'"' | sed 's/:$//'`; }
・bashrcを有効化
source ~/.bashrc
・以下のようなコマンドで、PATH, LD_LIBRARY_PATHを削除できる。
path_remove /usr/local/cuda-11.4/bin
lib_path_remove /usr/local/cuda-11.4/lib64
・以下のコマンドで、PATH, LD_LIBRARY_PATHを確認できる。
echo $PATH
echo $LD_LIBRARY_PATH
注意
以下を何度も行うと、同じPATH, LD_LIBRARY_PATHが重複して設定されてしまう。
source ~/.bashrc
重複した、PATH, LD_LIBRARY_PATHを自動で削除したい場合は、~/.bashrc末尾に以下を追加しておく。
export PATH=$(printf %s "$PATH" | awk -v RS=: -v ORS=: '!arr[$0]++')
export LD_LIBRARY_PATH=$(printf %s "$LD_LIBRARY_PATH" | awk -v RS=: -v ORS=: '!arr[$0]++')
参考
・【51】【Linux】パスの意味や意外に削除が複雑。また、lsコマンドとcdコマンドの違い
・$PATHから重複したディレクトリを削除する