Gnu parallel und ack aufgrund von stdin, pipe nicht gut zu spielen

652
mgalgs

Ich versuche zu verwenden parallelund ackzusammen einige Suchen parallel durchzuführen. Es ackscheint jedoch darauf zu bestehen, stdindass es verwendet wird, wenn es sich in einer Pipe befindet, selbst wenn Sie ihm Dateien zum Suchen geben:

$ 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 

Was muss ich tun, um schön zu spielen ackund parallelzu spielen?

4
Erwägen Sie, "parallel --bibtex" einmal auszuführen, um die "--no-notice" zu vermeiden. Ole Tange vor 10 Jahren 1

3 Antworten auf die Frage

4
hoelzro

Dies geschieht auch auf dem aktuellen dev-Zweig ( 9cc2407). Der Grund dafür ist, dass ack, wenn die Standardeingabe eine Pipe ist, hilfreich ist und davon ausgeht, dass Sie versuchen, diesen Eingabestrom zu durchsuchen. Wir haben dieses Verhalten bisher nicht gesehen, also habe ich es auf die ack developer-Mailingliste gesetzt. In der Zwischenzeit können Sie --nofilterdas Standardverhalten von ack überschreiben.

Hinzufügen von "--nofilter" funktioniert, danke! mgalgs vor 10 Jahren 0
2
Ole Tange

Das Problem liegt an dieser Zeile in ack:

$is_filter_mode = -p STDIN; 

Diese beiden Situationen werden also unterschiedlich behandelt ack:

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

Die Problemumgehung für Sie scheint zu sein cat:

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

Das funktioniert in ack2.12.

0
Ole Tange

Ich denke, ack ist krank: Sein Verhalten ist nicht deterministisch, aber es produziert von Zeit zu Zeit unterschiedliche Ergebnisse. Hier führe ich den gleichen Befehl 100 mal aus. 54 von ihnen geben "Hallo: Keine solche Datei oder Verzeichnis". Hinweis ackwird bashnicht von GNU Parallel ausgeführt.

$ 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 

Ich kann dieses Verhalten reproduzieren, wenn ich es 100 Mal von Hand ausführen:

$ ack hello test.txt <<Sometimes:>> hello: No such file or directory hi 
hmm, ich kann diese Ergebnisse nicht reproduzieren. Es ist für mich konstant. mgalgs vor 10 Jahren 0
Ich habe gerade unter Linux Mint 15 und Debian 7.0 getestet: Ich bekomme immer noch die inkonsistenten Ergebnisse. Welche O / S laufen Sie? Ole Tange vor 10 Jahren 0
Huh. Arch Linux. "ack 2.12", "perl 5.18.2". mgalgs vor 10 Jahren 0
Ich kann Ihre Ergebnisse mit "ack 2.12" reproduzieren. Ole Tange vor 10 Jahren 0