我有一個 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
是 shell 搜尋執行檔的目錄的冒號分隔清單。PATH
操縱是困難的,但有工具。我使用 Stephen Collyer 的 bash_path_funcs,早在 2000 年就在 Linux Journal 中進行了描述:
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
變數包含路徑的多個副本,使其過長。
這可以透過 shell 特定的(並且可能是唯一的)方式來處理zsh
。在該 shell 中,標量$PATH
變數與陣列變數「綁定」$path
(在上面的一小段 shell 程式碼中使用),這表示更改一個變數將自動更新另一個變數。此外,在zsh
shell 中,陣列變數可以宣告為「僅包含唯一元素」。將其應用於PATH
和path
變量,我們得到了一種確保PATH
不會像您所做的那樣增長的方法。
typeset -g -U PATH path
選項-g
使其typeset
將給定變數宣告為「全域」(而不是目前作用域的「局部」),-U
並使path
變數僅保留每個變數的第一次出現。
將該typeset
命令新增至 的第一個命令中~/.zshenv
,~/.zprofile
或~/.zshrc
新增至主目錄中的第一個命令中,將確保它對於終端機中的互動式 shell 會話處於活動狀態。
$ 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
,則只有新路徑的第一次出現才會保留在變數中。