これは、PATH をクリーンアップする 1 行のコードです
- PATH の順序を乱さず、重複を削除するだけです
- Treats :and empth PATH を優雅に
- 特殊文字は使用されていないため、エスケープは必要ありません
-
/bin/awk
を使用 そのため、PATH が壊れていても機能しますexport PATH="$(echo "$PATH" |/bin/awk 'BEGIN{RS=":";} {sub(sprintf("%c$",10),"");if(A[$0]){}else{A[$0]=1; printf(((NR==1)?"":":")$0)}}')";
実行するだけです:
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
これは現在のセッション用です。永続的に変更したい場合は、.bashrc、bash.bashrc、/etc/profile (システムとユーザーのニーズに合ったもの) に追加してください。
注:これは Linux 用です。これは、新しいコーダーのために明確にします。 (` , ') これらを SET =しようとしないでください。
<ブロック引用>
Linux:$PATH 変数から冗長なパスを削除
Linux From Scratch には、この機能が /etc/profile にあります
# Functions to help us manage paths. Second argument is the name of the
# path variable to be modified (default: PATH)
pathremove () {
local IFS=':'
local NEWPATH
local DIR
local PATHVARIABLE=${2:-PATH}
for DIR in ${!PATHVARIABLE} ; do
if [ "$DIR" != "$1" ] ; then
NEWPATH=${NEWPATH:+$NEWPATH:}$DIR
fi
done
export $PATHVARIABLE="$NEWPATH"
}
これは、パスに追加するためにこれらの関数で使用することを意図しているため、重複して実行することはありません:
pathprepend () {
pathremove $1 $2
local PATHVARIABLE=${2:-PATH}
export $PATHVARIABLE="$1${!PATHVARIABLE:+:${!PATHVARIABLE}}"
}
pathappend () {
pathremove $1 $2
local PATHVARIABLE=${2:-PATH}
export $PATHVARIABLE="${!PATHVARIABLE:+${!PATHVARIABLE}:}$1"
}
簡単な使い方は pathremove
を与えるだけです 削除するディレクトリ パス - ただし、正確に一致する必要があることに注意してください:
$ pathremove /home/username/anaconda3/bin
これにより、そのディレクトリの各インスタンスがパスから削除されます。
パスにディレクトリが必要であるが、冗長性がない場合は、他の関数のいずれかを使用できます。 - 特定の場合:
$ pathprepend /usr/local/sbin
$ pathappend /usr/local/bin
$ pathappend /usr/sbin
$ pathappend /usr/bin
$ pathappend /sbin
$ pathappend /bin
$ pathappend /usr/games
ただし、読みやすさが問題でない限り、この時点では、次のことを行った方がよいでしょう:
$ export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
上記は、人類が知っているすべてのシェルで機能しますか?
上記は sh
で動作すると思います 、 dash
、および bash
少なくとも。 csh
で動作しないことを知って驚くでしょう 、 fish', or
ksh`. Windows コマンド シェルや Powershell で動作するとは思えません。
Python を使用している場合は、次の種類のコマンドで、直接求められていることを実行する必要があります (つまり、冗長なパスを削除します):
$ PATH=$( python -c "
import os
path = os.environ['PATH'].split(':')
print(':'.join(sorted(set(path), key=path.index)))
" )
ワンライナー (複数行の問題を回避するため):
$ PATH=$( python -c "import os; path = os.environ['PATH'].split(':'); print(':'.join(sorted(set(path), key=path.index)))" )
上記により、後の冗長パスが削除されます。以前の冗長なパスを削除するには、逆順のリストのインデックスを使用して、もう一度逆順にします:
$ PATH=$( python -c "
import os
path = os.environ['PATH'].split(':')[::-1]
print(':'.join(sorted(set(path), key=path.index, reverse=True)))
" )
Bash を使用している場合、たとえばディレクトリ /home/wrong/dir/
を削除する場合は、次のこともできます。 PATH
から 変数:
PATH=`echo $PATH | sed -e 's/:\/home\/wrong\/dir\/$//'`