adiciona subdiretórios ao $ PATH no bash usando find

3

Eu tentei isso

PATH=$PATH$( find $HOME/scripts/ -type d -printf ":%p" )

mas funciona apenas no Linux, no OSX (ou Freebsd), não está funcionando porque -printf não é POSIX. Como posso escrever uma versão compatível para ambas as plataformas?

    
por fushupinnanren 22.02.2017 / 03:24

2 respostas

4

Faça isso para o shell bash ou dash:

PATH=$PATH$(find $HOME/scripts/ -type d -exec printf ":%s" {} +)

Além disso, se você quiser usar casca de peixe, você pode fazer isso:

set -x PATH $PATH (find $HOME/scripts/ -type d -exec printf ":%s" \{\} +)
    
por 22.02.2017 / 03:56
0

Desde que você marcou & intitule o Q com bash , aqui está uma solução que não requer find - usa o bash globstar para recuperar diretórios:

PATH=${PATH}$(shopt -s globstar dotglob; printf ":%s" ~/scripts/**/)

O shopt é executado em uma subshell, então eles não afetarão sua shell. O printf existe um bash embutido; Tive o cuidado de colocar o cólon antes do %s na string de formato printf para que você não acabe com uma string de caminho vazio não intencional no final (equivalente a adicionar . ao seu PATH).

    
por 25.02.2017 / 18:38