Poderia ser um alias quebrado. Dê uma olhada no seu /home/USERNAME/.bashrc (/root/.bashrc) Se você ver um
alias grep="grep -ARG1 -ARG2"
remova-o ou personalize-o como quiser.
Eu tenho um problema estranho. Meu grep
tem saída colorida e, se eu fizer algo assim:
grep -lr '80' /etc/apache2/sites-available/|xargs ls
Eu tenho:
ls: cannot access /etc/apache2/sites-available/default: No such file or directory
Mas se eu adicionar --colour=none
a grep
, tudo está OK.
Onde estou errado?
Where am I wrong?
Aqui está o problema: Você está analisando a saída de um comando que cria nomes de arquivos. Você deve nunca fazer isso. E se você fizer isso, você precisa ter certeza de que a saída está bem formada e os nomes dos arquivos estão devidamente delimitados. *
Normalmente, os nomes dos arquivos de tubulação para xargs
"simplesmente funcionam" e é uma solução "boa o suficiente", mas não funcionará se o comando estiver inserindo caracteres de controle de cores em sua stdout. A saída deve ser legível para humanos, em um terminal e não por outros comandos.
A verdadeira questão é: Por que você está fazendo | xargs ls
quando grep
já imprime os nomes dos arquivos?
* Por exemplo, find … -print0 | xargs -0
é uma construção que delimita arquivos com o único caractere que não é permitido em nomes de arquivos, então você estará seguro lá. No entanto, na maioria desses casos, find … -exec
funcionará bem.
Normalmente, há [0] 3 argumentos que podem ser usados com a opção --color
para grep
: "auto", "always" e "none". Parece que seu grep
pode ser alias para usar --color always
, nesse caso os códigos de escape ANSI usados para colorir a saída estão interferindo na capacidade de ls
de mostrá-los. Quando você usa --color=none
, você diz grep
para não usá-los, corrigindo seu problema. A opção auto
é um bom compromisso: ela diz para usar cores quando a saída é um terminal, mas não para se a saída é um arquivo ou pipeline, ou geralmente outra coisa onde os códigos ANSI não funcionarão como pretendido. p>
Dito isso, o slhck está certo e você provavelmente não precisa canalizar a saída de grep
para nada neste caso, mas é bom entender os problemas relacionados a cores para o futuro.
[0] Eu digo tipicamente, porque meu man page diz que você pode usar "never", "always" e "auto". Talvez "nenhum" e "nunca" sejam sinônimos.