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.