iniciando o vim com a substituição do comando

2

Estou trabalhando em um projeto em duas máquinas diferentes - uma rodando o Mac OSX 10.8.3 e outra rodando o Red Hat Enterprise Linux. No meu Mac, posso fazer isso:

vim $(ls -R */*.@(h|cpp) */*/*.@(h|cpp))

e tudo funciona bem. Na caixa do Linux, ele falha. Todos estes funcionam exatamente como eu esperava:

ls -R */*.@(h|cpp) */*/*.@(h|cpp)
echo $(ls -R */*.@(h|cpp) */*/*.@(h|cpp))
export myfilelist=$(ls -R */*.@(h|cpp) */*/*.@(h|cpp))
echo $myfilelist

Mas

vim $(ls -R */*.@(h|cpp) */*/*.@(h|cpp))

produz um conjunto de nomes de arquivos desconfigurados, por exemplo

^[[00m^[[00mevent_builder/include/eb_service.h^[[00m" [New DIRECTORY]

ou

:ls
  1 %a   "^[[00m^[[00mevent_builder/include/eb_service.h^[[00m" line 1
  2      "^[[00mevent_builder/include/EventBuilder.h^[[00m" line 0

Alguém sabe por quê?

    
por Gabriel Perdue 21.03.2013 / 14:16

1 resposta

9

Você tem um alias (ou função) para ls que colore a saída. O que type -a ls dá a você? Em vez disso, use

vim $(command ls ...)

No entanto: não analisa ls

Tente

shopt -s nullglob globstar
printf "%s\n" **/*.{h,cpp}
    
por 21.03.2013 / 14:29