Quero adicionar, em ~ / .bashrc, alguns diretórios ao meu $ PATH.
Meu $ PATH é bastante longo, portanto é um pouco difícil ver quais diretórios ele contém e em que ordem.
Eu sei que posso modificar meu ~ / .bashrc para:
PATH=$PATH:/some/dir
PATH=$PATH:/another/dir:/yet/another
PATH=$PATH:/and/another
...
facilitaria a leitura. Mas eu queria saber se, durante os últimos anos, o Bash adquiriu alguma sintaxe que facilita a especificação de um longo caminho. Por exemplo, estou fantasiando sobre uma sintaxe semelhante a:
PATH=:((
/some/dir
/another/dir
/yet/another
/and/another
...
))
Eu sei que essa sintaxe é inválida. Fiquei me perguntando se há algo tão fácil. Existe?
PATH=foo:$PATH
parece errado porque manter o crescimento cada vezsource ~/.bashrc
e até mesmoexec bash
não pode ajudar, uma vez que o$PATH
éexport
.Respostas:
Eu uso um conjunto de funções de conveniência para acrescentar ou acrescentar um caminho a uma variável. As funções vêm no pacote de distribuição do Bash em um arquivo de contribuição chamado "pathfuncs".
Se você especificar uma variável como o segundo argumento, ela será usada em vez de PATH.
Por conveniência, aqui estão eles:
Se você os adicionar ao seu arquivo de inicialização do bash, poderá adicioná-lo ao PATH assim:
Ou especifique uma variável diferente:
Eu uso esse método nos meus arquivos rc colocando os pre_paths primeiro e os add_paths segundo. Isso facilita a compreensão de todas as alterações no meu caminho. Outro benefício é que as linhas são curtas o suficiente para que eu possa adicionar um comentário à linha, se necessário.
E como essas são funções, você pode usá-las interativamente a partir da linha de comando, como dizendo
add_path $(pwd)
para adicionar o diretório atual ao caminho.fonte
del_path .
).OK, descobri a seguinte solução, que acho elegante (no que diz respeito à sintaxe do shell). Ele usa a sintaxe de matriz do Bash e também uma maneira elegante de juntar elementos:
ALERTA!
Acontece que esta solução tem um problema : Ao contrário das soluções @terdon e @Starfish, ela não verifica primeiro se os caminhos já estão no PATH. Então, como eu quero colocar esse código em ~ / .bashrc (e não em ~ / .profile), caminhos duplicados aparecerão no PATH. Portanto, não use esta solução (a menos que você a coloque em ~ / .profile (ou, melhor, ~ / .bash_profile, pois possui sintaxe específica do Bash)).
fonte
PATH
para realmente causar problemas de desempenho (especialmente porque o shell armazena em cache as pesquisas bem-sucedidas).Eu uso a função abaixo no meu
~/.bashrc
. É algo que recebi de um administrador de sistemas no meu antigo laboratório, mas acho que ele não escreveu. Basta adicionar essas linhas ao seu~/.profile
ou~/.bashrc
:Isso tem várias vantagens:
$PATH
trivial:pathmunge /foo/bar
;pathmunge /foo/bar
ou ao final (pathmunge /foo/bar
depois) do)$PATH
.O arquivo de inicialização do seu shell conteria algo como:
fonte
grep
.eval
comando para que você possa causar algum dano sério se o executar com o argumento errado.grep
, consulte bugzilla.redhat.com/show_bug.cgi?id=544652#c7Quero adicionar, em ~ / .bashrc, alguns diretórios ao meu $ PATH.
Eu uso o seguinte no Cygwin. Deve funcionar em outras versões do bash. Você pode remover a
unset PATH
versão atualPATH
(se você fizer isso, talvez precise descobrir como adicionar os:
separadores corretamente).Nota:
bash
função, mas a perdi após uma falha no disco.No meu
.bash_profile
:...
Em
~/.path_elements
:fonte
Eu uso isso no meu .bashrc (e também no meu .zshrc, pois normalmente uso o zsh quando disponível, em vez do bash). É verdade que exige que eu adicione diretórios manualmente, mas uma vantagem é que, à medida que o atualizo, posso copiá-lo para novos servidores e não me preocupar com o PATH em um novo servidor criado com diretórios que não existem lá.
Eu faço o mesmo pelo meu MANPATH:
Além de ter um único arquivo que eu posso copiar para sistemas em ambientes diferentes, sem medo de adicionar diretórios inexistentes ao PATH, essa abordagem também tem a vantagem de permitir que eu especifique a ordem em que os diretórios devem aparecer no PATH. Como a primeira linha de cada definição redefine completamente a variável PATH, eu posso atualizar meu .bashrc e originar após a edição para atualizar meu shell sem adicionar entradas duplicadas (que eu costumava experimentar há muito tempo quando simplesmente comecei com " $ PATH = $ PATH: / new / dir ". Isso garante que eu receba uma cópia limpa na ordem que desejar.
fonte
d="/usr/share/man" ; [ -d "$d" ] && MANPATH="$MANPATH:${d}"
será mais curto e mais fácil adicionar um novo diretório (basta copiar uma linha e editar a primeira parte "d = ...."). No entanto, para o PATH, acho que você terminará com muitos dirs no PATH, o que nem sempre é bom (e se algum comando "foo" existir em um dos caminhos menos conhecidos e fazer algo totalmente diferente) que o que um usuário regular seria de esperar)?Existe uma maneira fácil! Leia Funções de Shell e Variáveis de Caminho no Linux Journal , 01 de março de 2000 Por Stephen Collyer
As funções permitem-me usar um novo tipo de dados no meu ambiente bash - a lista separada por dois pontos. Além do PATH, eu os uso para ajustar meu LOCATE_PATH, MANPATH e outros, e como um tipo de dados geral na programação do bash. Aqui está como eu configuro meu PATH (usando as funções):
Como o link do Linux Journal é chamado de "quebrado", coloquei as Funções do caminho Bash em um arquivo .shar em http://pastebin.ubuntu.com/13299528/
fonte