Eu tenho um macOS e esta é a saída que recebo quando o façoecho $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
Isto está certo? É longo e se for longo, como posso encurtar? por favor ajude
Responder1
PATH
é uma lista de diretórios separados por dois pontos que seu shell procura por executáveis. PATH
a manipulação é difícil, mas existem ferramentas. Eu uso o bash_path_funcs de Stephen Collyer, descrito no Linux Journal em 2000:
https://www.linuxjournal.com/article/3645 https://www.linuxjournal.com/article/3768 https://www.linuxjournal.com/article/3935
A addpath
função adiciona uma entrada a um caminho somente se ele não estiver lá. delpath -n
exclui todos os diretórios inexistentes de um caminho. uniqpath
elimina duplicatas.
Você pode obter o pathfunc.tgz
arquivo em https://web.archive.org/web/20061210054813/http://www.netspinner.co.uk:80/Downloads/pathfunc.tgz
Responder2
$ 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
Como você pode ver, sua PATH
variável contém múltiplas cópias de caminhos, tornando-a excessivamente longa.
Isso pode ser tratado de uma maneira específica (e possivelmente exclusiva) do zsh
shell. Nesse shell, a $PATH
variável escalar está "vinculada" à variável array $path
(usada no pequeno código do shell acima), o que significa que a alteração de uma atualizará a outra automaticamente. Além disso, no zsh
shell, uma variável de array pode ser declarada para "conter apenas elementos únicos". Aplicando isso às variáveis PATH
e path
, obtemos uma maneira de garantir que the PATH
não cresça como o seu cresceu.
typeset -g -U PATH path
A -g
opção typeset
faz com que declare as variáveis fornecidas como "globais" (em vez de "locais" para o escopo atual), e -U
faz com que a path
variável mantenha apenas a primeira ocorrência de cada variável.
Adicionar esse typeset
comando ao primeiro de ~/.zshenv
, ~/.zprofile
ou ~/.zshrc
que existe em seu diretório inicial, garantiria que ele estivesse ativo para suas sessões interativas de shell no terminal.
$ 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
Para adicionar um caminho ao final de PATH
,
path+=( '/new/path' )
ou
path=( $path '/new/path' )
Para adicionar um caminho ao início de PATH
,
path=( '/new/path' $path )
Se a path
variável se tornou "única" com typeset -U
, apenas a primeira ocorrência do novo caminho será mantida na variável.