디렉토리가 아직없는 경우에만 zsh의 PATH에 디렉토리를 추가하는 방법이 있습니까?


15

zsh에서 디렉토리가없는 경우에만 PATH에 디렉토리를 추가하는 쉬운 방법이 있습니까? (또는 더 일반적으로 모든 환경 변수). 난 노력 했어:

PATH+=/my/directory

...하지만 두 번 실행되면 두 번 추가됩니다.


2
@uther, 다른 질문은 bash에 대한 것이기 때문에 중복되지는 않지만이 질문은이 문제를 해결하는 자체 방법이있는 zsh에 대한 것입니다.
Stéphane Chazelas

답변:


32

이어 zsh $PATH(참조 묶여 typeset -T받는) $path배열. 다음을 사용하여 해당 배열에 고유 한 값 을 갖도록 할 수 있습니다 .

typeset -U path

그런 다음 경로를 다음과 같이 추가하십시오.

path+=(~/foo)

이미 있다면 걱정할 필요가 없습니다.

앞에 추가하려면 다음을 수행하십시오.

path=(~/foo "$path[@]")

또는:

path[1,0]=~/foo

경우 ~/foo에 이미 $path그 앞쪽으로 이동합니다.


당신은 의미하지 typeset -Ug path않습니까? 파일 typeset -U path에서 사용할 때 ~/.zshrczshrc가 실행되는 동안 경로에 아무것도 없다는 오류가 항상 나타납니다.
kalbasit

@eMxyzptlk, 이상하다. -g범위 제한을 피하는 것이지만 ~/.zshrc의 범위는 이미 전역입니다. 또한 zsh비어있는 것에 대해 불평하는 것을 본 적이 없습니다 $PATH(명령은 물론 오류를 찾을 수 없음).
Stéphane Chazelas

3

export -U PATH=~/foo${PATH:+:$PATH}시작 파일 중 하나에 추가 하십시오. 이 -U값은 배열이나 :PATH와 같은 특정 구분 변수 에서 처음 나타나는 값만 유지합니다 .


-3

다음과 같은 작업을 수행해야합니다.

if echo $PATH | grep :newpath: ; then doIfPresent; else doIfMissing; fi

이것은 newpathbu 2 ':'로 구분 되는 경우에만 작동 하며, 시작 또는 끝이 비슷한 경우를 고려해야합니다.

어.


1
Bourne / POSIX 기능 만 사용하여 쉘 내에서이를 수행 할 수 있습니다. 이렇게하면 두통을 피할 수 있습니다 (적어도 항상echo "$PATH" : 대체 변수를 큰 따옴표로 묶으십시오 ). case ":$PATH:" in *:/new/directory:*) :;; *) PATH=$PATH:/new/directory;; esac
Gilles 'SO- 악마 그만'
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.