Grep sai anormalmente com o código 123 ao executar o rgrep no emacs

7

Cumprimenta o colega Emacsers

Estou executando o GNU Emacs 23.1.1 no "Ubuntu 10.04.1 LTS" e qualquer pesquisa que eu executar usando o Mx rgrep embutido no código-fonte padrão do kernel do Linux (baunilha) termina prematuramente com o seguinte erro imprimido a área de eco do emacs:

Grep exited abnormally with code 123

Eu tenho visto isso por um tempo em sistemas Redhat também, e com outras bases de código (grandes), Alguém viu ou melhor ainda curou isso?

Obrigado!

Editar: por razões além do meu stackexchange não me permite editar o meu comentário abaixo, então eu vou atualizar aqui.

após o comentário abaixo Eu tentei executar o mesmo comando que o rgrep executa em um buffer de shell do emacs

 find . \( -path \*/SCCS -o -path \*/RCS -o -path \*/CVS -o -path \*/MCVS -o -path \*/.svn -o -path \*/.git
-o -path \*/.hg -o -path \*/.bzr -o -path \*/_MTN -o -path \*/_darcs -o -path \*/\{arch\} \) -prune -o  -type f \( -name \*.\[ch\] \) -p
rint0 | xargs -0 -e grep -i -nH -e v4l_compat_ioctl32

enquanto ele não imprime nenhum erro, interrogar o código de saída mostra o mesmo 123 novamente.

/home/mcradle/linux> echo $?
123

seguindo o comentário de Gilles que tentei executar

/home/mcradle/linux> find . -type f \( -name \*.\[ch\] \) -exec grep -i -nH -e v4l_compat_ioctl32 '{}' \;

que é funcionalmente equivalente à combinação find e xargs e é completado com o código de saída 0

/home/mcradle/linux> echo $?
0

, então parece ser algo com xargs.

    
por Mcradle 07.10.2010 / 18:27

2 respostas

9

Olhando para a documentação do código de saída do xargs:

123 if any invocation of the command exited with status 1-125

mas de acordo com a documentação do grep 1 é o status de saída se o grep não corresponder ao padrão

EXIT STATUS
   Normally, the exit status is 0 if selected lines are found and 1 otherwise.  

Então, para mim, parece que a linha de comando que o emacs usa para emitir uma pesquisa 'rgrep' sempre retornará 123, e esse erro precisa ser suprimido ou substituído por uma linha de comando como

find . -type f \( -name \*.\[ch\] \) -exec grep -i -nH -e v4l
    
por 08.10.2010 / 21:04
2

Parece que você está tentando fazer um grep recursivo através de vários arquivos C .c e .h, ignorando os diretórios usados pelos sistemas de controle de versão. Você quer ack. Veja link

O comando para fazer exatamente o que você está fazendo, em ack:

ack --cc -i v4l_compat_ioctl32

Os efeitos de -r, -n e -H são assumidos em ack. O -i ainda não faz distinção entre maiúsculas e minúsculas, e --cc diz "Pesquisar apenas os arquivos * .c e * .h"

Não há necessidade de encontrar. Não há necessidade de xargs. Apenas uma versão do Perl instalada e um único programa Perl, sem módulos externos.

    
por 08.10.2010 / 21:44