Gnu paralelo e ack não jogando bem devido a stdin, pipe

4

Estou tentando usar parallel e ack para fazer algumas pesquisas em paralelo. No entanto, ack parece insistir em usar stdin se ele se encontrar em um canal, mesmo se você fornecer arquivos para pesquisa:

$ echo hello > test.txt

$ ack hello test.txt
hello

$ echo test.txt | xargs ack hello
hello

$ echo test.txt | parallel ack hello {}

# ack thinks it should be searching stdin:
$ echo test.txt | parallel ack -f {}
-

# even though parallel is indeed passing test.txt:
$ echo test.txt | parallel --dry-run ack hello {}
ack hello test.txt

O que preciso fazer para que ack e parallel funcionem bem?

    
por mgalgs 29.04.2014 / 00:35

3 respostas

4

Isso também acontece no ramo de desenvolvimento atual ( 9cc2407 ). A razão para isso é que, quando a entrada padrão é um canal, o ack tenta ser útil e supõe que você esteja tentando pesquisar esse fluxo de entrada. Nós não vimos esse comportamento antes, então eu falei sobre isso na lista de discussão dos desenvolvedores do ACK. Enquanto isso, você pode usar --nofilter para substituir o comportamento padrão do ack.

    
por 29.04.2014 / 22:33
2

O problema é devido a esta linha em ack :

$is_filter_mode = -p STDIN;

Portanto, essas duas situações são tratadas de maneira diferente em ack :

cat file | ack ...
ack < file ...

A solução alternativa para você parece ser adicionar um cat :

echo test.txt | parallel cat {} \| ack hello

Isso funciona em ack 2.12.

    
por 29.04.2014 / 23:09
0

Eu acho que o ack está doente: seu comportamento não é determinístico, mas produz resultados diferentes de tempos em tempos. Aqui eu corro o mesmo comando 100 vezes. 54 deles dão "oi: Nenhum tal arquivo ou diretório". Nota ack está sendo executado por bash não pelo Paralelo GNU.

$ seq 100 | parallel -N0 echo ack hello test.txt > test.sh
$ bash test.sh 2>&1 | sort | uniq -c
 54 hello: No such file or directory
100 hi

Eu posso reproduzir esse comportamento ao executar isso manualmente 100 vezes:

$ ack hello test.txt
<<Sometimes:>> hello: No such file or directory
hi
    
por 29.04.2014 / 14:59