Adicione o diretório ~ / projects / * / bin no ambiente PATH (Ubuntu 16.04)

1

Tudo está no título. Eu sei como adicionar um novo caminho na variável PATH do ambiente, mas gostaria de torná-lo recursivo adicionando automaticamente /bin pastas de todos os meus projetos futuros.

Algo como, substituindo isso:

PATH=$PATH:~/projects/project1/bin
PATH=$PATH:~/projects/project2/bin
..
PATH=$PATH:~/projects/projectN/bin

Por isso:

PATH=$PATH:~/projects/*/bin

Problema: cada vez que coloco o * nele, isso não é reconhecido pelo sistema. Você vê uma maneira de fazer isso?

Estou trabalhando no Ubuntu 16.04

    
por hackela 11.06.2018 / 21:45

1 resposta

0

Para realizar algo assim, você precisará colocar algum código no que é chamado de subcomando na maioria dos shells. No Bash, sua notação é $(...some command...) .

Abordagem

$ find ~ -iregex ".*project.*/bin" | xargs | sed 's/ /:/g'

Esse one liner produzirá uma lista de diretórios que contêm um subdiretório /bin dentro deles. Não é 100% perfeito, pois não pode manipular diretórios que contenham espaços em seus nomes, mas se você souber que sua situação está de acordo com essa regra, você poderá usá-la.

Usando o snippet acima, você construiria seu $PATH da seguinte forma:

PATH=$PATH:$(find ~ -iregex ".*project.*/bin" | xargs | sed 's/ /:/g')

Exemplo

Para este exemplo, usarei $MYPATH como um substituto para $PATH . Para começar, temos alguns diretórios já contidos em $MYPATH .

$ MYPATH=/path1/bin:/path2/bin
$ echo $MYPATH
/path1/bin:/path2/bin

Agora, adicione todos os diretórios ~/project*/bin a $MYPATH :

$ MYPATH=$MYPATH:$(find ~ -iregex ".*project.*/bin" | xargs | sed 's/ /:/g')
$ echo $MYPATH
/path1/bin:/path2/bin:/Users/slm/project1/bin:/Users/slm/project2/bin:/Users/slm/project3/bin
    
por 12.06.2018 / 05:19