Adicionar itens ao $PATH
não é recursivo. Apenas os diretórios que estão presentes em $PATH
serão pesquisados pelo seu shell quando ele estiver procurando executáveis para serem executados.
Para ver o que está no momento no seu $PATH
:
$ printenv PATH
4 táticas comuns ao lidar com muitos diretórios, como o que você está enfrentando, são:
- adicione-os individualmente, o que é perfeitamente aceitável,
$PATH
pode ser razoavelmente longo.
- use o comando
alternatives
( man page ) para criar links simbólicos para os vários executáveis nos diferentes diretórios. Isso troca um longo $PATH
por ter que manter links simbólicos para os vários executáveis.
- crie aliases ou invólucros
.sh
scripts que possam existir em um diretório comum e altere dinamicamente o $PATH
ou outras variáveis de ambiente, conforme necessário.
- Use uma ferramenta para gerenciar seu ambiente, como
modules
.
Mais informações
Onde eu costumava trabalhar, usamos uma tecnologia que desenvolvemos internamente chamada use
scripts, operadores que executavam comandos como use X
, onde X
era o nome + versão de um pacote de software CAD / CAM como o Xilinx. . Isso adicionaria automaticamente os diretórios e variáveis de ambiente apropriados ao shell do usuário. Quando eles terminassem com X
, eles poderiam dizer use -no X
. para descarregar essa ferramenta de seu ambiente.
Métodos mais exóticos
Outra abordagem para construir seu $PATH
, mas de uma maneira mais modular, seria imitar a maneira como a maioria dos sistemas funciona criando um diretório /etc/profile.d
. Você pode criar o seu próprio, ou até mesmo utilizar o diretório /etc/profile.d
do seu sistema para facilitar a adição de coisas ao seu ambiente e / ou $PATH
.
Por exemplo, se você olhar para o seu /etc/bashrc
, poderá perceber essa construção:
for i in /etc/profile.d/*.sh; do
if [ -r "$i" ]; then
if [ "$PS1" ]; then
. "$i"
else
. "$i" >/dev/null
fi
fi
done
Você pode se modelar com algo semelhante, no qual pode colocar fragmentos de itens que deseja adicionar ao seu ambiente $PATH
+.
Quando este loop for executado, ele incorporará o conteúdo dos vários arquivos em sua versão do diretório profile.d
. Você só precisaria criar arquivos em seu diretório com conteúdo como este:
file1.sh
PATH=$PATH:$HOME/tools/tool1/bin
file2.sh
PATH=$PATH:$HOME/tools/tool2/bin
Você pode organizar esse diretório da maneira que quiser.