나는 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
Make the Variable "unique" 를 사용 하면 typeset -U
새 경로의 첫 번째 항목만 변수에 남게 됩니다.