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)))
" )