$ PATH 변수에 동일한 경로를 6 번 정의했습니다.
작동 여부를 확인하기 위해 로그 아웃하지 않았습니다.
중복을 제거하려면 어떻게해야합니까?
$ PATH 변수는 다음과 같습니다.
echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/flacs/Programmes/USFOS/bin:/home/flacs/Programmes/USFOS/bin:/home/flacs/Programmes/USFOS/bin:/home/flacs/Programmes/USFOS/bin:/home/flacs/Programmes/USFOS/bin:/home/flacs/Programmes/USFOS/bin
어떻게 재설정합니까?
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
답변
다음을 실행합니다.
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
그것은 현재 세션에 대한 것입니다. 만약 당신이 영구적으로 변경하고 싶다면 .bashrc, bash.bashrc, / etc / profile-당신의 시스템과 사용자가 필요로하는 모든 것에 추가하십시오.
참고 : 이것은 Linux 용입니다. 새로운 코더를 위해 이것을 명확히 할 것입니다. (`, ‘) SET = 이들을 시도하지 마십시오.
답변
당신이 배쉬를 사용하는 경우, 당신은 또한의 당신이 디렉토리를 제거 할 말을하자, 경우 다음 작업을 수행 할 수 있습니다 /home/wrong/dir/
귀하의에서 PATH
변수 :
PATH=`echo $PATH | sed -e 's/:\/home\/wrong\/dir\/$//'`
답변
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)))
" )
답변
다음은 PATH를 정리하는 한 줄 코드입니다.
- PATH의 순서를 방해하지 않고 중복 만 제거합니다.
- : 및 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)}}')";
답변
- 다만
echo $PATH
- 텍스트 편집기로 세부 사항 복사
- 원하지 않는 항목 제거
PATH= # pass new list of entries
답변
중복 경로를 제거하려면 여러 perl5 / bin 경로에 문제가 있었기 때문에 잠시 전에 작성한이 스크립트를 사용합니다.
#!/bin/bash
#
# path-cleanup
#
# This must be run as "source path-cleanup" or ". path-cleanup"
# so the current shell gets the changes.
pathlist=`echo $PATH | sed 's/:/\n/g' | uniq`
# echo "Starting PATH: $PATH"
# echo "pathlist: $pathlist"
unset PATH
# echo "After unset, PATH: $PATH"
for dir in $pathlist
do
if test -d $dir ; then
if test -z $PATH; then
PATH=$dir
else
PATH=$PATH:$dir
fi
fi
done
export PATH
# echo "After loop, PATH: $PATH"
그리고 마지막에 ~ / .profile에 넣습니다. BASH를 거의 독점적으로 사용하기 때문에 다른 쉘에서는 시도하지 않았습니다.
답변
셸이 Bash라고 가정하면 다음을 사용하여 경로를 설정할 수 있습니다.
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
그러나 Levon이 다른 답변에서 말했듯이 쉘을 종료하자마자 변경 사항이 사라집니다. 당신은 아마 당신 설정할 PATH
의를 ~/.bash_profile
나 ~/.bashrc
.