Como adicionar um diretório ao seu PATH


Eu estava conversando com um amigo sobre como adicionar um diretório ao seu PATH hoje. É algo que parece “óbvio” para mim, já que uso o terminal há muito tempo, mas quando procurei instruções sobre como fazer isso, na verdade não consegui encontrar algo que explicasse todas as etapas – muitas delas apenas diziam “adicione isto a ~/.bashrc“, mas e se você não estiver usando o bash? E se a configuração do bash estiver realmente em um arquivo diferente? E como você deve descobrir qual diretório adicionar?

Então, eu queria tentar escrever algumas instruções mais completas e mencionar algumas das pegadinhas que encontrei ao longo dos anos.

Aqui está um índice:

passo 1: qual shell você está usando?

Se você não tiver certeza de qual shell está usando, aqui está uma maneira de descobrir. Execute isto:

ps -p $$ -o pid,comm=
  • se você estiver usando festaele será impresso 97295 bash
  • se você estiver usando zshele será impresso 97295 zsh
  • se você estiver usando peixeele imprimirá um erro como “No peixe, use $fish_pid” ($$ não é uma sintaxe válida em fish, mas em qualquer caso a mensagem de erro informa que você está usando fish, o que você provavelmente já sabia)

Além disso, bash é o padrão no Linux e zsh é o padrão no Mac OS (a partir de 2024). Abordarei apenas bash, zsh e fish nessas direções.

passo 2: encontre o arquivo de configuração do seu shell

  • no zsh, provavelmente é ~/.zshrc
  • no bash, pode ser ~/.bashrcmas é complicado, veja a nota na próxima seção
  • em peixes, provavelmente é ~/.config/fish/config.fish (você pode correr echo $__fish_config_dir se você quiser ter 100% de certeza)

uma nota sobre o arquivo de configuração do bash

Bash tem três arquivos de configuração possíveis: ~/.bashrc, ~/.bash_profilee ~/.profile.

Se você não tiver certeza de qual deles seu sistema está configurado para usar, recomendo testar desta forma:

  1. adicionar echo hi there para o seu ~/.bashrc
  2. Reinicie seu terminal
  3. Se você vir “oi”, isso significa ~/.bashrc está sendo usado! Viva!
  4. Caso contrário, remova-o e tente a mesma coisa com ~/.bash_profile
  5. Você também pode tentar ~/.profile se as duas primeiras opções não funcionarem.

(existem muitos fluxogramas elaborados por aí que explicam como o bash decide qual arquivo de configuração usar, mas IMO não vale a pena internalizá-los e apenas testar é a maneira mais rápida de ter certeza)

etapa 3: descubra qual diretório adicionar

Digamos que você esteja tentando instalar e executar um programa chamado http-server
e não funciona, assim:

$ npm install -g http-server
$ http-server
bash: http-server: command not found

Como você encontra qual diretório http-server está dentro? Honestamente, em geral, isso não é tão fácil – muitas vezes a resposta é algo como “depende de como o npm está configurado”. Algumas ideias:

  • Muitas vezes, ao configurar um novo instalador (como cargo, npm, homebrewetc), quando você configurá-lo pela primeira vez, ele imprimirá algumas instruções sobre como atualizar seu PATH. Então, se você estiver prestando atenção, poderá obter as instruções.
  • Às vezes, os instaladores atualizam automaticamente o arquivo de configuração do seu shell para atualizar o seu PATH para você
  • Às vezes, apenas pesquisando no Google “onde o npm instala as coisas?” vai aparecer a resposta
  • Algumas ferramentas possuem um subcomando que informa onde estão configuradas para instalar coisas, como:
    • Nó/npm: npm config get prefix (depois anexe /bin/)
    • Ir: go env GOPATH (depois anexe /bin/)
    • asdf: asdf info | grep ASDF_DIR (depois anexe /bin/ e /shims/)

etapa 3.1: verifique se é o diretório correto

Depois de encontrar um diretório que você acha que pode ser o correto, certifique-se de que esteja realmente correto! Por exemplo, descobri que na minha máquina, http-server está em ~/.npm-global/bin. Posso ter certeza de que é o diretório correto tentando executar o programa http-server nesse diretório assim:

$ ~/.npm-global/bin/http-server
Starting up http-server, serving ./public

Funcionou! Agora que você sabe qual diretório precisa adicionar ao seu PATHvamos para a próxima etapa!

etapa 4: edite sua configuração do shell

Agora temos as 2 informações críticas de que precisamos:

  1. Qual diretório você está tentando adicionar ao seu PATH (como ~/.npm-global/bin/)
  2. Onde está a configuração do seu shell (como ~/.bashrc, ~/.zshrcou ~/.config/fish/config.fish)

Agora o que você precisa adicionar depende do seu shell:

instruções bash:

Abra o arquivo de configuração do seu shell e adicione uma linha como esta:

export PATH=$PATH:~/.npm-global/bin/

(obviamente substitua ~/.npm-global/bin com o diretório real que você está tentando adicionar)

instruções zsh:

Você pode fazer a mesma coisa que no bash, mas o zsh também tem uma sintaxe um pouco mais sofisticada que você pode usar se preferir:

path=(
  $path
  ~/.npm-global/bin
)

instruções de peixe:

Em peixes, a sintaxe é diferente:

set PATH $PATH ~/.npm-global/bin

(em peixes você também pode usar fish_add_pathalgumas notas sobre isso mais abaixo)

passo 5: reinicie seu shell

Agora, um passo extremamente importante: atualizar a configuração do seu shell não terá efeito se você não reiniciá-lo!

Duas maneiras de fazer isso:

  1. abra um novo terminal (ou guia de terminal) e talvez feche o antigo para não ficar confuso
  2. Correr bash para iniciar um novo shell (ou zsh se você estiver usando zsh, ou fish se você estiver usando peixe)

Descobri que ambos geralmente funcionam bem.

E você deve terminar! Tente executar o programa que você estava tentando executar e espero que funcione agora.

Caso contrário, aqui estão alguns problemas que você pode encontrar:

problema 1: executou o programa errado

Se o errado versão de um programa está em execução, pode ser necessário adicionar o diretório ao começo do seu PATH em vez do final.

Por exemplo, no meu sistema eu tenho duas versões do python3 instalado, o que posso ver executando which -a:

$ which -a python3
/usr/bin/python3
/opt/homebrew/bin/python3

Aquele que seu shell usará é o primeiro listado.

Se você quiser usar a versão Homebrew, você precisa adicionar esse diretório (/opt/homebrew/bin) para o começo do seu PATH, colocando isso no arquivo de configuração do seu shell (é /opt/homebrew/bin/:$PATH em vez do habitual $PATH:/opt/homebrew/bin/)

export PATH=/opt/homebrew/bin/:$PATH

ou em peixes:

set PATH ~/.cargo/bin $PATH

problema 2: o programa não está sendo executado no seu shell

Todas essas instruções só funcionam se você estiver executando o programa da sua concha. Se você estiver executando o programa a partir de um IDE, de uma GUI, em um cron job ou de alguma outra forma, será necessário adicionar o diretório ao seu PATH de uma maneira diferente, e os detalhes exatos podem depender da situação.

em um cron job

Algumas opções:

  • use o caminho completo para o programa que você está executando, como /home/bork/bin/my-program
  • coloque o PATH completo que você deseja como a primeira linha do seu crontab (algo como PATH=/bin:/usr/bin:/usr/local/bin:….). Você pode obter o PATH completo que está usando no seu shell executando echo "PATH=$PATH".

Sinceramente, não tenho certeza de como lidar com isso em um IDE/GUI porque não encontro isso há muito tempo. Adicionarei instruções aqui se alguém me indicar a direção certa.

problema 3: duplicado PATH entradas dificultando a depuração

Se você editar seu caminho e iniciar um novo shell executando bash (ou zshou
fish), muitas vezes você acabará com duplicatas PATH entradas, porque o shell continua adicionando coisas novas ao seu PATH toda vez que você inicia seu shell.

Pessoalmente, não acho que tenha passado por uma situação em que esse tipo de duplicação quebre alguma coisa, mas as duplicatas podem dificultar a depuração do que está acontecendo com o seu PATH se você está tentando entender seu conteúdo.

Algumas maneiras de lidar com isso:

  1. Se você estiver depurando seu PATHabra um novo terminal para fazer isso e obter um estado “fresco”. Isto deve evitar a duplicação.
  2. Desduplicar seu PATH no final da configuração do seu shell (por exemplo, no zsh, aparentemente você pode fazer isso com typeset -U path)
  3. Verifique se o diretório ainda não está em seu PATH ao adicioná-lo (por exemplo, em peixes, acredito que você pode fazer isso com fish_add_path --path /some/directory)

Como desduplicar seu PATH é específico do shell e nem sempre existe uma maneira integrada de fazer isso, então você precisará procurar como fazê-lo no seu shell.

problema 4: perder seu histórico após atualizar seu PATH

Aqui está uma situação fácil de entrar no bash ou zsh:

  1. Execute um comando (falha)
  2. Atualize seu PATH
  3. Correr bash para recarregar sua configuração
  4. Pressione a seta para cima algumas vezes para executar novamente o comando com falha (ou abrir um novo terminal)
  5. O comando com falha não está no seu histórico! Por que não?

Isso acontece porque no bash, por padrão, o histórico não é salvo até você sair do shell.

Algumas opções para corrigir isso:

  • Em vez de correr bash para recarregar sua configuração, execute source ~/.bashrc (ou
    source ~/.zshrc em zsh). Isso recarregará a configuração dentro da sua sessão atual.
  • Configure seu shell para salvar continuamente seu histórico, em vez de salvá-lo apenas quando o shell for encerrado. (Como fazer isso depende se você está usando bash ou zsh, as opções de histórico no zsh são um pouco complicadas e não tenho certeza de qual é a melhor maneira)

uma nota sobre source

Quando você instala cargo (Instalador do Rust) pela primeira vez, ele fornece estas instruções sobre como configurar seu PATH, que não mencionam nenhum diretório específico.

This is usually done by running one of the following (note the leading DOT):

. "$HOME/.cargo/env"        	# For sh/bash/zsh/ash/dash/pdksh
source "$HOME/.cargo/env.fish"  # For fish

A idéia é que você adicione essa linha à configuração do seu shell, e o script deles configure automaticamente o seu PATH (e potencialmente outras coisas) para você.

Isso é bastante comum (por exemplo, o Homebrew sugere que você avalie brew shellenv), e há duas maneiras de abordar isso:

  1. Basta fazer o que a ferramenta sugere (como adicionar . "$HOME/.cargo/env" para a configuração do seu shell)
  2. Descubra quais diretórios o script que eles estão dizendo para você executar adicionaria ao seu PATH e, em seguida, adicione-os manualmente. Veja como eu faria isso:
    • Correr . "$HOME/.cargo/env" na minha concha (ou na versão peixe se estiver usando peixe)
    • Correr echo "$PATH" | tr ':' 'n' | grep cargo para descobrir quais diretórios ele adicionou
    • Veja o que diz /Users/bork/.cargo/bin e encurte isso para ~/.cargo/bin
    • Adicione o diretório ~/.cargo/bin para PATH (com as instruções nesta postagem)

Não creio que haja nada de errado em fazer o que a ferramenta sugere (pode ser a “melhor maneira”!), mas pessoalmente costumo usar a segunda abordagem porque prefiro saber exatamente qual configuração estou alterando.

uma nota sobre fish_add_path

fish tem uma função útil chamada fish_add_path que você pode executar para adicionar um diretório ao seu PATH assim:

fish_add_path /some/directory

Isso é legal (é um comando tão simples!), Mas parei de usá-lo por alguns motivos:

  1. Às vezes fish_add_path irá atualizar o PATH para cada sessão no futuro (com uma “variável universal”) e às vezes atualizará o PATH
    apenas para a sessão atual e é difícil dizer qual delas servirá. Em teoria, os documentos explicam isso, mas não consegui entendê-los.
  2. Se você precisar remover o diretório do seu PATH algumas semanas ou meses depois, porque talvez você tenha cometido um erro, é meio difícil de fazer (embora haja instruções nestes comentários sobre este problema do github).

isso é tudo

Espero que isso ajude algumas pessoas. Deixe-me saber (no Mastodon ou Bluesky) se houver outras dicas importantes que o atrapalharam ao adicionar um diretório ao seu PATH, ou se você tiver dúvidas sobre este post!



Source link

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *

Botão Voltar ao Topo