터미널 명령을 사용하여 시스템 경로 (`$ PATH`)에서 경로를 제거하는 방법은 무엇입니까?


10

다음 $PATH을 실행 하여 시스템 경로 ( )에 디렉토리 경로를 추가했습니다 .

export PATH=$PATH:/home/avinash/Desktop/raj

이제 내 경로는 다음과 같습니다.

$ echo $ PATH
/ usr / lib / lightdm / lightdm : / usr / local / sbin : / usr / local / bin : / usr / sbin : / usr / bin : / sbin : / bin : / usr / games : / usr / local / games : / home / avinash / Desktop / raj

export 명령이 path 추가 할 때와 같이/home/avinash/Desktop/raj command를 사용하여 시스템 경로 변수에서 제거하고 싶습니다 .


수출 명세서를 어디에 넣었습니까?
souravc

그놈 터미널 (ctrl + alt + t)
Avinash Raj

답변:


14

실행 export PATH=$PATH:/...해도 PATH시스템 전체가 설정되지는 않습니다 . 쉘 변수 일뿐입니다. 새로운 쉘을 시작하고 BOOM을 지나갔습니다. 분명히 ~/.bashrc(또는 다른 환경 부트 스트랩 파일)에 추가 한 경우 해당 변경 사항을 되돌려 야하지만 여기서는 문제가되지 않습니다.

새 쉘을 시작하지 않으려는 경우에는 다음과 같이 수동으로 제거하여 설정할 수 있습니다.

export PATH=/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

11

현재 쉘 (현재 gnome-terminal 세션)에서 다음을 사용하여이를 수행 할 수 있습니다.

export PATH=${PATH%:/home/avinash/Desktop/raj}

일반적으로 :

${string%substring}

삭제는 매치 짧은 $substring에서 다시$string.

자세한 내용은 문자열 조작 을 확인하십시오 .


2

명령으로 사용하려면 약간의 스크립트가 있습니다.

#!/bin/bash

# This script removes folder from PATH variable
# Folders to remove reading as arguments

if [ $# -lt 1 ]; then
    echo "You should give at least one argument"
    echo "For example"
    echo "$0 /usr/local/bin"
else
    FOLDERS_TO_REMOVE=`echo $@ | sed 's/ /|/g'`

    echo "You actually PATH variable is:"
    echo $PATH
    echo "###"

    PATH=$( echo ${PATH} | tr -s ":" "\n" | grep -vwE "(${FOLDERS_TO_REMOVE})" | tr -s "\n" ":" | sed "s/:$//" )

    echo "Now you need to run"
    echo "export PATH=$PATH"
fi

이름을 지정하고 unexportPATH에 추가하십시오.

용법:

unexport /usr/local/bin /bin /sbin

이 스크립트는 실제로 변경되지 않습니다 PATH. 스크립트를 사용하려면 마지막 줄을 변경해야합니다. 대체 echo "export PATH=$PATH"하다export PATH=$PATH


2

다음과 export같은 쉘 시작 파일에 명령문 을 넣으면 ~/.bashrc터미널에서 다음 명령을 사용할 수 있습니다.

#remove the export statement from the file.
sed -i 's#export PATH=$PATH:/home/avinash/Desktop/raj##g' ~/.bashrc
#source ~/.bashrc
. ~/.bashrc

경로에서 폴더를 제거합니다.

터미널에서 경로를 내 보낸 경우

해당 쉘에있는 한 폴더는 경로에 있습니다. 경로를 덮어 쓰려면 새 경로를 할당해야합니다. 올리가 이미 다른 답변에서 언급했듯이.

다음 명령을 사용하여 이전 경로를 설정할 수 있습니다

export PATH=`echo ${PATH/\:\/home\/avinash\/Desktop\/raj/}`

아니면 간단히

export PATH=${PATH/':/home/avinash/Desktop/raj'/}

이것은 Substring Replacement입니다.

${string/substring/replacement}

2

하나의 더러운 해킹은

export PATH="$( echo $PATH| tr : '\n' |grep -v raj | paste -s -d: )"
  1. PATH의 각 디렉토리를 사용하여 행별로 구분하십시오. tr
  2. 를 사용하여 원하지 않는 것 (경로 일치 "raj")을 제거 grep -v하고
  3. 를 사용하여 긴 ":"으로 구분 된 문자열로 다시 축소합니다 paste.

PATH의 디렉토리에 :줄 이 있거나 줄 바꿈 이 있으면 아마도 잘 작동하지 않습니다.

당신이 찾아내는 경우에 자신이 그것을하는 기능을하고 쉘 프로파일에 저장, 많은이 고려하고 (예를 들어 .bashrc, .zshrc)

# use like: rminpath "raj"
rminpath(){ export PATH="$( echo $PATH| tr : '\n' |grep -v "$1" | paste -sd: )"; }

1

export PATH=$PATH:/home/avinash/Desktop/raj (여기서 파일을 경로 변수에 추가했습니다.)

echo $PATH
이 명령을 실행하면 다음이 출력됩니다.

/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/avinash/Desktop/raj

경로에서 어떻게 제거합니까? 그냥 실행

$ export PATH=${PATH/'/home/avinash/Desktop/raj'/}

문자열 교체의 개념입니다.

$ export PATH=${string/substring/replacement}

0

쉘 내장 명령 export변수 설정 여부를 판별하지 않고 변수 및 해당 값도 서브 프로세스에 설정되어 있는지 판별합니다.

내보내기 여부에 관계없이 변수를 변경해도 상위 프로세스 이상에는 영향을 미치지 않으므로 스크립트에서 스크립트를 실행하지 않으면 스크립트에서 변수를 변경해도 아무런 영향이 없습니다 source.

쉘 기능 :

function trimpath {
    PATH=${PATH%:*}
}

PATH 변수의 마지막 구성 요소를 제거합니다. 그 export상태는 영향을받지 않습니다.


0

선언 자체가 당신이 원하는 것을 업데이트하고 그것이 무엇인지 완전히 당신의 결정에 달려 있다고 착각하지 않으면 -x PATH = "/ desired / path / you_want"를 선언하십시오. [이 변경 사항을 적용 할 원하는 사용자로 루트로 실행하십시오.] 두 번 확인하려면 ENV를 실행하여 $ PATH가 원하는대로 효과적으로 변경되었는지 확인하십시오. (이것은 '/ usr / bin / env'를 실행할 때 얻을 수있는 출력을 변경하는 데 사용할 수 있습니다. 영구적인지 여부는 알 수 없지만 위에서 언급 한대로 ~ / .bashrc를 변경하십시오. 그것은 붙어)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.