Adicione vários subdiretórios no mesmo diretório pai ao PATH

2

Instalei algumas ferramentas e coloquei-as em $ HOME / tools / e cada ferramenta tem seu próprio diretório / bin que contém o programa executável. Agora tenho o caminho para cada indivíduo / bin no meu arquivo $ HOME / .bashrc assim:

export PATH=$PATH:$HOME/tools/tool1/bin
export PATH=$PATH:$HOME/tools/tool2/bin
...

Eu estou querendo saber se não há problema em escrever o seguinte para todas as ferramentas?

export PATH=$PATH:$HOME/tools

Se isso não funcionar, qual é a melhor maneira de fazer isso?

    
por user2157668 12.02.2014 / 00:45

4 respostas

5

Adicionar um diretório a PATH apenas disponibiliza os executáveis nesse diretório como nomes de comando simples. Isso não se estende a subdiretórios.

Você pode colocar um loop em .profile ( não .bashrc ) para adicionar vários diretórios, por exemplo:

for d in ~/tools/*/bin; do
  PATH="$PATH:$d"
done

(Você não precisa repetir export : quando uma variável é exportada, ela permanece exportada e as modificações são refletidas no ambiente).

Se você criar novos diretórios em tools , isso não será refletido em sua sessão em andamento, apenas na próxima vez em que .profile for lido. Se isso não for satisfatório, você pode usar uma abordagem diferente: coloque um único diretório como ~/bin em seu PATH e, quando instalar o software, crie links simbólicos em ~/bin . Stow (ou sua alternativa XStow ) é uma boa maneira de fazer isso; consulte Como acompanhar os programas para obter uma visão geral de como isso funciona.

    
por 12.02.2014 / 01:08
1

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:

  1. adicione-os individualmente, o que é perfeitamente aceitável, $PATH pode ser razoavelmente longo.
  2. 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.
  3. 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.
  4. 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.

    
por 12.02.2014 / 00:57
0

Não, isso não vai funcionar! que adicionará apenas $ HOME / tools ao seu caminho.

O princípio de cada ferramenta ter seu próprio bin dir não se encaixa muito bem, pense em /bin ou /usr/bin tudo que está lá (bem, quase tudo), cada pacote não tem seu próprio bin dir. (Ortogonal?)

    
por 12.02.2014 / 00:54
0

Você pode fazer um dos seguintes

  1. Basta adicionar todas as pastas bin como você fez

  2. Crie outra pasta bin como $HOME/bin e, em seguida, vincule simbolicamente os binários relevantes em $HOME/bin e, em seguida, adicione $HOME/bin ao seu caminho

  3. Se você tiver direitos de administrador na máquina, use /usr/local para suas compilações de aplicativos e, em seguida, tudo estará no lugar automaticamente e não será necessário alterar seu caminho. Ou seja, ./configure ligado está automaticamente se certificando de que o aplicativo será instalado em /usr/local

  4. Use algo como o ambiente dos módulos link , que você pode adicionar ao seu ambiente e, dependendo do aplicativo que deseja executar, então você pode alterar o ambiente.

Espero que isso faça sentido.

    
por 12.02.2014 / 01:02

Tags