sh 스크립트를 통해 PATH에서 CUDA 디렉토리를 제거하고 싶습니다. 디렉토리는 다음을 통해 표시됩니다.echo $PATH
/usr/local/cuda-9.0/bin:/usr/sbin:/usr/bin:
나는 단지 다음을 원한다:
/usr/sbin:/usr/bin:
내 스크립트는 아무것도 변경하지 않았지만 터미널에서는 변경되었습니다(이 작업을 수행하면 스크립트가 자동으로 실행됩니다 conda deactivate
).
export PATH=$(echo ${PATH} | sed -r 's|/usr/local/cuda-9.0/bin||')
누군가 나에게 이유를 알려주고 우아하게 수정할 수 있나요?
답변1
export PATH=$(echo ${PATH} | sed -r 's|/usr/local/cuda-9.0/bin||')
또는 더 정확한 버전은 다음과 같습니다.
export PATH="$(printf '%s\n' "$PATH" | sed 's|/usr/local/cuda-9\.0/bin||')"
$PATH
첫 번째 항목을 제거하여 명령을 호출한 셸의 변수 내용을 업데이트합니다 /usr/local/cuda-9.0/bin
. 예를 들어, a를 원하지 않는 /bin:/opt/usr/local/cuda-9.0/bin/v2:/usr/local/cuda-9.0/bin
것으로 변경합니다 ./bin:/opt/v2:/usr/local/cuda-9.0/bin
전체 요소를 제거하려면 다음을 수행할 수 있습니다.
export PATH="$(
printf ':%s:\n' "$PATH" |
sed '
:1
s|:/usr/local/cuda-9\.0/bin:|:|g; t1
s|^:||; s|:$|'
)"
또는 zsh를 사용하십시오.
path=("${path[@]:#/usr/local/cuda-9.0/bin}")
$PATH
처음에 만 포함 하면 /usr/local/cuda-9.0/bin
최종 결과는 비어 있게 됩니다 $PATH
. 그리고 빈 $PATH
의미현재 디렉터리에서 실행 파일 검색당신이 원하는 것이 아닌가요? 이것이 가능하다면 $PATH
비슷한 것을 만들고 싶을 수도 있습니다 /inexistent/to/disable/PATH/lookup
.
무슨 일이 있어도 $PATH
코드를 실행하는 셸의 변수만 변경된다는 점에 유의하세요. $PATH
스크립트를 호출하는 쉘의 변수에 영향을 미치려면 해당 쉘이 필요합니다원천(동일 .
또는 source
명령) 이 스크립트 를 deactivate
만들거나deactivate
기능그 껍질.
또는 deactivate
스크립트를 사용할 수 있습니다산출이러한 항목을 제거하는 데 필요한 셸 코드를 제거하고 $PATH
(예: export -p PATH
수정 후 추가) 다음과 같이 호출되는지 확인하세요.
eval "$(deactivate)"
항목을 제거하려는 셸에서 $PATH
.
그것은 다음과 같습니다:
#! /bin/zsh -
path=("${path[@]:#/usr/local/cuda-9.0/bin}")
export -p PATH
답변2
당신은 간단하게 할 수 있습니다 export PATH=/usr/sbin:/usr/bin
. 그러나 귀하의 방법은 이미 작동합니다.
$ PATH=/usr/local/cuda-9.0/bin:/usr/sbin:/usr/bin:
$ export PATH=$(echo ${PATH} | sed -r 's|/usr/local/cuda-9.0/bin||')
$ echo $PATH
:/usr/sbin:/usr/bin:
PATH
현재 환경에서 설정을 시도해 보세요.달리기스크립팅이 불가능합니다.