ZSH의 PATH 변수에 새 항목 추가


188

zsh를 사용 /home/david/pear/bin하고 있으며 PATH변수에 새 항목 ( )을 추가하려고 하지만 방법을 모르겠습니다.

나를 가장 혼란스럽게하는 것은 PATH내 ~/.zshrc파일에 변수에 대한 단일 참조가 없지만 echo $PATH반환을 수행한다는 것입니다 .

/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

그래서 PATH변수가 어딘가에 설정되고 있습니다.

답변:


211

여기 에이 줄을 추가하십시오 .zshrc:

export PATH=/home/david/pear/bin:$PATH

편집 : 이것은 작동하지만 ZSH 가와 같은 변수를 제공하는 구조적 인터페이스를 활용하기 때문에 아래 의 ony의 대답 이 더 좋습니다 $PATH. 이 접근법은 표준 bash이지만, 아는 한 ZSH가 더 나은 대안을 제공 할 때 사용할 이유가 없습니다.


29
하하 그것을 잊어 버렸습니다. 콘솔 명령 일 뿐이지 만 .zshrc에 해당 줄을 추가하면 트릭을 얻었습니다. 고마워요!
— David Barreto

1
내 .zshrc에는 이미 PATH 내보내기 행이 있으므로 수정 된 것으로 바꿨습니다.
— Zack Huston

6
나는 항목 주위에 따옴표가, 즉 제거해야 PATH="/home/david/pear/bin:/usr/bin:etc"으로 PATH=/home/david/pear/bin:/usr/bin:etc는 zshrc를 유지하기.
— a7omiton 2019

3
@taco, 당신은 $ HOME을 사용할 수 있습니다
— mencargo

1
@DanielSpringer : 그렇습니다. 쉘을 열면 쉘 PATH이 시작된 상위 프로세스에서 상속 된 다음 실행될 때 .zshrc( .bashrc또는 기타) 해당 경로에 추가 항목을 추가 할 수 있습니다.
— Linuxios

222

실제로 ZSH를 사용하면 환경 변수의 특수 매핑을 사용할 수 있습니다. 그래서 당신은 간단하게 할 수 있습니다 :

# append
path+=('/home/david/pear/bin')
# or prepend
path=('/home/david/pear/bin' $path)
# export to sub-processes (make it inherited by child processes)
export PATH

저에게는 다른 변수로 전파 될 수있는 매우 깔끔한 기능입니다. 예:

typeset -T LD_LIBRARY_PATH ld_library_path :

16
좋은 대답입니다. 내 경우에는 ~/.zshrc을 소스로 하여의 .profile모든 내용을 덮어 씁니다 .profile. 머리를 잡아 당기는 동안 잠시 걸렸습니다.
— Khanh Nguyen

1
추가 요소는 둘 이상의 요소를 추가하지 않는 한 괄호가 필요하지 않습니다. 또한 종종 따옴표가 필요하지 않습니다. 간단하고 간단한 방법은
— Micah Elliott

1
@SuperUberDuper, 거의 모든 유닉스 쉘은 단순히 대화식으로 쉘에 입력하는 것과 거의 동일한 시작 파일을 읽는다는 것을 이해해야합니다. "RC"파일에 대해서 당신이 흥미 답을 찾을 수있는 이 질문
— ONY

6
를 사용하여 명시 적으로 내보내기를 피하고 -x변수에 고유 한 값만 남겨 둘 -U수 있습니다. 콜론은 기본적으로 가정되므로 다음과 같습니다.typeset -TUx PATH path
— Grief

2
@DanielSpringer, 아니. 당신이 그 용어로 그것을 원한다면 path=(...)(참조 $path또는 $PATH내부 없이 ) 할당하고, path=(... $path)추가하고 path+(...)추가합니다.
— ony

40

PATH최소한의 방식으로 추가 할 수 있습니다 . 요소를 두 개 이상 추가하지 않으면 괄호가 필요하지 않습니다. 또한 일반적으로 따옴표가 필요하지 않습니다. 따라서 간단하고 짧은 추가 방법 은 다음과 같습니다.

path+=/some/new/bin/dir

일반적인 사용법

그런 다음 새 스크립트 / 실행 파일을 테스트하기위한 공통 패턴은 다음과 같습니다.

path+=$PWD/.
# or
path+=$PWD/bin

이 소문자 구문은 배열path 로 사용 되지만 대문자 파트너에 영향을 미칩니다 (이를 통해 "바운드" ).PATHtypeset

( 세퍼레이터로 필요하거나 원하지 않음에 유의하십시오: .)

관련 음식

path이 방법을 (배열로) 처리 하면 새로 경로 지정된 명령을 찾기 위해 수행 할 필요가 없습니다 rehash .

또한 vared path동적으로 편집path 하고 다른 것들을 살펴보십시오 .

path이 질문 에만 관심이있을 수 있지만 내보내기 및 배열에 대해 이야기하고 있으므로 일반적으로 배열을 내보낼 수 없습니다.

중복 된 항목을 가져 가지 못하게PATH 할 수도 있습니다 ( this 및 this 참조 ).

typeset -U path

'path + = : / foo / bar'가 아니어야합니까? (콜론으로)
— Andrew lorien

1
@andrewlorien 콜론 구분 기호에 대한 세부 정보로 답변을 업데이트했습니다.
— Micah Elliott

경로 뒤에 주석이 있으면 다음과 같이 따옴표가 필요합니다 path+='my/path' # for fun. 공백이 있으면 분명하지만 주석이 있으면 그렇게 많이하지 않습니다.
— Franklin Yu

"(: 구분 기호로 필요하지 않음 :주의하십시오." "이것은 소문자에만 해당됩니다 path. .zshrc:PATHPATH+=:/Users/path/to/my/folder
— Emmett R.

37

~/.zshrc파일 을 열지 않고 하나의 라이너

echo -n 'export PATH=~/bin:$PATH' >> ~/.zshrc

또는

echo -n 'export PATH=$HOME/bin:$PATH' >> ~/.zshrc

효과를 보려면 source ~/.zshrc동일한 탭에서 수행하거나 새 탭을여십시오.


1
Zsh 셸을 사용하여 OSX에서 완벽하게 작동했습니다.
— Stryker

1
매력처럼 일했다!
— Akbar Sha Ebrahim 6

14
  1. ~ / .zshrc에 경로 추가

    sudo vi ~/.zshrc

    새로운 길 추가

    export PATH="$PATH:[NEW_DIRECTORY]/bin"
  2. ~ / .zshrc 업데이트

    ~ / .zshrc 저장

    source ~/.zshrc

  3. PATH 확인

    echo $PATH


2
이것이 Bash방법입니다.
— CousinCocaine

13

옵션 1 : ~ / .zshrc에 다음 행을 추가하십시오.

export "PATH=$HOME/pear/bin:$PATH"

그런 source ~/.zshrc다음 변경 사항을 적용하거나이 창을 닫고 새 창을 열려면 실행해야합니다.

옵션 2 : 터미널 콘솔 내에서 실행하여이 경로를 현재 터미널 창 세션에만 추가하십시오. 창 / 세션을 닫으면 손실됩니다.


이 답변이 5 년 전 게시 된 동일한 답변과 어떻게 다른지 자세히 설명해 주 시겠습니까?
— Franklin Yu

이 답변에서는 파일 에이 코드 줄을 추가해야한다고 말하지 않습니다. 단지 현재 창에서만 변경되는 것처럼 실행하면 원래 답변에서는 설명되지 않습니다.
— Dimitar
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.