나는 macOS를 가지고 있고 이것이 내가 할 때 얻는 출력입니다echo $PATH
usr/local/opt/avr-gcc@8/bin:/Users/hari/google-cloud-sdk/bin:/Users/hari/.edgedb/bin:/Library/Frameworks/Python.framework/Versions/3.9/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/go/bin:/Library/Frameworks/EdgeDB.framework/bin:/opt/X11/bin:/Library/Apple/usr/bin:/Users/hari/.cargo/bin:/Users/hari/.fig/bin:/usr/local/go:/Users/hari/go:/Users/hari/go/bin:/Users/hari/flutter/bin:/Users/hari/.edgedb/bin:/Library/Frameworks/Python.framework/Versions/3.9/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/go/bin:/Library/Frameworks/EdgeDB.framework/bin:/opt/X11/bin:/Library/Apple/usr/bin:/Users/hari/.cargo/bin:/Users/hari/.fig/bin:/usr/local/go:/Users/hari/go:/Users/hari/go/bin:/Users/hari/.npm/bin:/Users/hari/.edgedb/bin:/Library/Frameworks/Python.framework/Versions/3.9/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/go/bin:/Library/Frameworks/EdgeDB.framework/bin:/opt/X11/bin:/Library/Apple/usr/bin:/Users/hari/.cargo/bin:/Users/hari/.fig/bin:/usr/local/go:/Users/hari/go:/Users/hari/go/bin:/Users/hari/flutter/bin:/Users/hari/.edgedb/bin:/Library/Frameworks/Python.framework/Versions/3.9/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/go/bin:/Library/Frameworks/EdgeDB.framework/bin:/opt/X11/bin:/Library/Apple/usr/bin:/Users/hari/.cargo/bin:/Users/hari/.fig/bin:/usr/local/go:/Users/hari/go:/Users/hari/go/bin:/Users/hari/.pub-cache/bin:/Users/hari/.edgedb/bin:/Library/Frameworks/Python.framework/Versions/3.9/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/go/bin:/Library/Frameworks/EdgeDB.framework/bin:/opt/X11/bin:/Library/Apple/usr/bin:/Users/hari/.cargo/bin:/Users/hari/.fig/bin:/usr/local/go:/Users/hari/go:/Users/hari/go/bin:/Users/hari/flutter/bin:/Users/hari/.edgedb/bin:/Library/Frameworks/Python.framework/Versions/3.9/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/go/bin:/Library/Frameworks/EdgeDB.framework/bin:/opt/X11/bin:/Library/Apple/usr/bin:/Users/hari/.cargo/bin:/Users/hari/.fig/bin:/usr/local/go:/Users/hari/go:/Users/hari/go/bin:/Users/hari/.npm/bin:/Users/hari/.edgedb/bin:/Library/Frameworks/Python.framework/Versions/3.9/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/go/bin:/Library/Frameworks/EdgeDB.framework/bin:/opt/X11/bin:/Library/Apple/usr/bin:/Users/hari/.cargo/bin:/Users/hari/.fig/bin:/usr/local/go:/Users/hari/go:/Users/hari/go/bin:/Users/hari/flutter/bin:/Users/hari/.edgedb/bin:/Library/Frameworks/Python.framework/Versions/3.9/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/go/bin:/Library/Frameworks/EdgeDB.framework/bin:/opt/X11/bin:/Library/Apple/usr/bin:/Users/hari/.cargo/bin:/Users/hari/.fig/bin:/usr/local/go:/Users/hari/go:/Users/hari/go/bin:/Users/hari/Library/Android/sdk/platform-tools/.:/Users/hari/.edgedb/bin:/Library/Frameworks/Python.framework/Versions/3.9/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/go/bin:/Library/Frameworks/EdgeDB.framework/bin:/opt/X11/bin:/Library/Apple/usr/bin:/Users/hari/.cargo/bin:/Users/hari/.fig/bin:/usr/local/go:/Users/hari/go:/Users/hari/go/bin:/Users/hari/flutter/bin:/Users/hari/.edgedb/bin:/Library/Frameworks/Python.framework/Versions/3.9/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/go/bin:/Library/Frameworks/EdgeDB.framework/bin:/opt/X11/bin:/Library/Apple/usr/bin:/Users/hari/.cargo/bin:/Users/hari/.fig/bin:/usr/local/go:/Users/hari/go:/Users/hari/go/bin:/Users/hari/.npm/bin:/Users/hari/.edgedb/bin:/Library/Frameworks/Python.framework/Versions/3.9/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/go/bin:/Library/Frameworks/EdgeDB.framework/bin:/opt/X11/bin:/Library/Apple/usr/bin:/Users/hari/.cargo/bin:/Users/hari/.fig/bin:/usr/local/go:/Users/hari/go:/Users/hari/go/bin:/Users/hari/flutter/bin:/Users/hari/.edgedb/bin:/Library/Frameworks/Python.framework/Versions/3.9/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/go/bin:/Library/Frameworks/EdgeDB.framework/bin:/opt/X11/bin:/Library/Apple/usr/bin:/Users/hari/.cargo/bin:/Users/hari/.fig/bin:/usr/local/go:/Users/hari/go:/Users/hari/go/bin:/Users/hari/.pub-cache/bin:/Users/hari/.edgedb/bin:/Library/Frameworks/Python.framework/Versions/3.9/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/go/bin:/Library/Frameworks/EdgeDB.framework/bin:/opt/X11/bin:/Library/Apple/usr/bin:/Users/hari/.cargo/bin:/Users/hari/.fig/bin:/usr/local/go:/Users/hari/go:/Users/hari/go/bin:/Users/hari/flutter/bin:/Users/hari/.edgedb/bin:/Library/Frameworks/Python.framework/Versions/3.9/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/go/bin:/Library/Frameworks/EdgeDB.framework/bin:/opt/X11/bin:/Library/Apple/usr/bin:/Users/hari/.cargo/bin:/Users/hari/.fig/bin:/usr/local/go:/Users/hari/go:/Users/hari/go/bin:/Users/hari/.npm/bin:/Users/hari/.edgedb/bin:/Library/Frameworks/Python.framework/Versions/3.9/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/go/bin:/Library/Frameworks/EdgeDB.framework/bin:/opt/X11/bin:/Library/Apple/usr/bin:/Users/hari/.cargo/bin:/Users/hari/.fig/bin:/usr/local/go:/Users/hari/go:/Users/hari/go/bin:/Users/hari/flutter/bin:/Users/hari/.edgedb/bin:/Library/Frameworks/Python.framework/Versions/3.9/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/go/bin:/Library/Frameworks/EdgeDB.framework/bin:/opt/X11/bin:/Library/Apple/usr/bin:/Users/hari/.cargo/bin:/Users/hari/.fig/bin:/usr/local/go:/Users/hari/go:/Users/hari/go/bin:/Users/hari/.fzf/bin
이게 옳은 거니? 이렇게 긴가요? 길면 어떻게 짧게 만들 수 있나요? 도와주세요
답변1
PATH
쉘이 실행 파일을 검색하는 디렉토리의 콜론으로 구분된 목록입니다. PATH
조작은 어렵지만 도구는 있습니다. 나는 2000년에 Linux Journal에 설명된 Stephen Collyer의 bash_path_funcs를 사용합니다.
https://www.linuxjournal.com/article/3645 https://www.linuxjournal.com/article/3768 https://www.linuxjournal.com/article/3935
이 addpath
함수는 처음에 항목이 없는 경우에만 경로에 항목을 추가합니다. delpath -n
경로에서 존재하지 않는 모든 디렉토리를 삭제합니다. uniqpath
중복을 제거합니다.
pathfunc.tgz
에서 파일 을 받을 수 있습니다 .https://web.archive.org/web/20061210054813/http://www.netspinner.co.uk:80/Downloads/pathfunc.tgz
답변2
$ printf '%s\n' $path | sort | uniq -c
16 /Library/Apple/usr/bin
16 /Library/Frameworks/EdgeDB.framework/bin
16 /Library/Frameworks/Python.framework/Versions/3.9/bin
16 /Users/hari/.cargo/bin
16 /Users/hari/.edgedb/bin
16 /Users/hari/.fig/bin
1 /Users/hari/.fzf/bin
4 /Users/hari/.npm/bin
2 /Users/hari/.pub-cache/bin
1 /Users/hari/Library/Android/sdk/platform-tools/.
8 /Users/hari/flutter/bin
16 /Users/hari/go
16 /Users/hari/go/bin
1 /Users/hari/google-cloud-sdk/bin
16 /bin
16 /opt/X11/bin
16 /sbin
16 /usr/bin
16 /usr/local/bin
16 /usr/local/go
16 /usr/local/go/bin
16 /usr/sbin
1 usr/local/opt/avr-gcc@8/bin
보시다시피 PATH
변수에 여러 개의 경로 복사본이 포함되어 있어 길이가 너무 길어집니다.
이는 쉘에 특정한(그리고 아마도 고유한) 방식으로 처리될 수 있습니다 zsh
. 해당 셸에서 스칼라 $PATH
변수는 배열 변수 $path
(위의 짧은 셸 코드에서 사용됨)에 "연결"되어 있습니다. 즉, 하나를 변경하면 다른 하나가 자동으로 업데이트된다는 의미입니다. 또한 zsh
셸에서 배열 변수는 "고유한 요소만 포함"하도록 선언될 수 있습니다. 이것을 PATH
및 변수에 적용하면 가 귀하가 한 것처럼 커지지 않도록 path
하는 방법을 얻게 됩니다 .PATH
typeset -g -U PATH path
주어진 변수를 (현재 범위에 대해 "로컬"이 아닌) "전역"으로 선언하고 변수가 각 변수의 첫 번째 발생만 유지하도록 -g
하는 옵션 입니다 .typeset
-U
path
해당 명령을 홈 디렉터리에 있는 또는 중 typeset
첫 번째 명령에 추가하면 해당 명령이 터미널의 대화형 셸 세션에 대해 활성화됩니다.~/.zshenv
~/.zprofile
~/.zshrc
$ typeset -g -U PATH path
$ printf '%s\n' $path | sort | uniq -c
1 /Library/Apple/usr/bin
1 /Library/Frameworks/EdgeDB.framework/bin
1 /Library/Frameworks/Python.framework/Versions/3.9/bin
1 /Users/hari/.cargo/bin
1 /Users/hari/.edgedb/bin
1 /Users/hari/.fig/bin
1 /Users/hari/.fzf/bin
1 /Users/hari/.npm/bin
1 /Users/hari/.pub-cache/bin
1 /Users/hari/Library/Android/sdk/platform-tools/.
1 /Users/hari/flutter/bin
1 /Users/hari/go
1 /Users/hari/go/bin
1 /Users/hari/google-cloud-sdk/bin
1 /bin
1 /opt/X11/bin
1 /sbin
1 /usr/bin
1 /usr/local/bin
1 /usr/local/go
1 /usr/local/go/bin
1 /usr/sbin
1 usr/local/opt/avr-gcc@8/bin
의 끝에 경로를 추가하려면 PATH
,
path+=( '/new/path' )
또는
path=( $path '/new/path' )
의 시작 부분에 경로를 추가하려면 PATH
,
path=( '/new/path' $path )
path
를 사용하여 변수를 "고유"하게 만든 경우 typeset -U
새 경로의 첫 번째 항목만 변수에 유지됩니다.