Pipe para grep não está funcionando no zsh

4

Eu estou fazendo algo que sempre faço no Bash:

set | grep -i path 

e a saída é

Binary file (standard input) matches

O que há de errado? grep --help funciona e set | more também funciona.

    
por Dan Rosenstark 17.05.2010 / 15:45

3 respostas

12

Faça isso:

set > /tmp/zshset

Em seguida, abra /tmp/zshset no seu editor favorito. Procure por IFS .

O valor padrão para isso, pela página zshparam man, é espaço padrão, tabulação, nova linha e NUL. Este último está causando o problema. grep vê o NUL (ascii 0, exibido frequentemente como ^@ ) e pensa que este é um arquivo binário.

Soluções possíveis:

  • Defina o IFS para algum outro valor. Isso pode causar problemas se alguma outra coisa você espera que o NUL seja um delimitador válido.
  • Use grep -a como sugerido por KeithB (ou seu equivalente --binary-files=text )
  • Crie um novo alias para você mesmo que use grep -a para economizar um pouco de digitação
  • Adapte-se a analisar seu PATH por outros meios (por exemplo, env | grep -i path , echo $PATH ) - acho que as outras soluções são mais simples
por 17.05.2010 / 16:14
2

Não tenho certeza do que está acontecendo, mas você pode passar o sinal -a ao grep para forçá-lo a tratar sua entrada como texto, independentemente do que ele ache que seja.

    
por 17.05.2010 / 15:54
0

Outra solução alternativa se o seu grep não implementar -a é fazer:

$ set | cat -v | grep foo
    
por 04.04.2014 / 08:18

Tags