O resultado do compgen contém códigos de cores do terminal porque você os coloca lá. Você deve usar alias ls='ls --color=auto'
para que só obtenha cores quando ls
for impresso em um terminal, não quando a saída for usada por outro comando.
Mas mesmo sem o alias, compgen -W "$(ls /someDir/)"
não funciona. Ele chama ls
para gerar uma lista de nomes de arquivos, mas a saída de um comando é uma string, não uma lista. compgen
divide a saída de ls
no espaço em branco, que falhará se algum dos nomes de arquivo contiver um caractere de espaço em branco. Em vez disso, você precisa gerar a lista de nomes de arquivos e remover o prefixo do diretório. Não testado:
files=(/someDir/*)
if [[ -e ${files[0]} -o -L ${files[0]} ]]; then
for f in "${files[@]}"; do
compgen -- "${f#/someDir/}"
done
fi
Você não terá cores. Eu não acho que o bash é capaz de colorir as conclusões. O sistema de conclusão precisa controlar sua exibição no terminal, você não pode inserir caracteres de controle no que é exibido e esperar não confundir o sistema de conclusão. Se você quiser um shell com ótimos recursos como preenchimentos coloridos , use zsh (ou peixe se você não gosta de configurabilidade).