Gerando lista de caminhos separados por dois pontos usando find

1

Estou tentando gerar uma lista de diretórios parecida com o PATH, usando comandos simples bash e UNIX. Eu acho que este aqui me dá a saída que eu gosto de usar:

$ find /usr/local -type d -exec dirname \{\} \; | sort -u | tr '\n' ':'
/usr:/usr/local:/usr/local/lib:/usr/local/lib/python2.6:/usr/local/lib/site_ruby:/usr/local/lib/site_ruby/1.8:/usr/local/lib/xemacs:/usr/local/share:/usr/local/share/emacs:/usr/local/share/emacs/23.2:/usr/local/share/sgml:/usr/local/share/xml:/usr/local/share/zsh:

No entanto, quando tento usar essa expressão usando a substituição de comando (por exemplo, para atribuir a uma variável), ela é interrompida:

$ echo $(find /usr/local -type d -exec dirname \{\} \; | sort -u | tr '\n' ':' )
/usr /usr/local /usr/local/lib /usr/local/lib/python2.6 /usr/local/lib/site_ruby /usr/local/lib/site_ruby/1.8 /usr/local/lib/xemacs /usr/local/share /usr/local/share/emacs /usr/local/share/emacs/23.2 /usr/local/share/sgml /usr/local/share/xml /usr/local/share/zsh

Alguma idéia do que estou fazendo de errado ou como posso alcançar meu objetivo de maneira diferente?

    
por Arne 30.07.2012 / 16:21

1 resposta

1

Verifique o conteúdo da variável de ambiente IFS , o separador de campos. Não é usado na forma find , mas na forma echo $(find) .

export IFS="-"
echo $(...)

compare:

export IFS=:
echo $(echo asdf:asdf:asdf)
> asdf asdf asdf

export IFS=;
echo $(echo asdf:asdf:asdf)
> asdf:asdf:asdf

export IFS=:
unset IFS
echo $(echo asdf:asdf:asdf)
> asdf:asdf:asdf
    
por 25.09.2012 / 18:40