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 --nofilter
das Standardverhalten von ack überschreiben.
Gnu parallel und ack aufgrund von stdin, pipe nicht gut zu spielen
Ich versuche zu verwenden parallel
und ack
zusammen einige Suchen parallel durchzuführen. Es ack
scheint jedoch darauf zu bestehen, stdin
dass 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 ack
und parallel
zu spielen?
3 Antworten auf die Frage
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 ack
2.12.
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 ack
wird bash
nicht 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
Verwandte Probleme
-
1
Pausieren Sie alle Aufgaben außer x CPU-intensiven Aufgaben
-
10
Wie kann ich die Bash-Historie durchsuchen und einen Befehl erneut ausführen?
-
2
Kann die Ausgabe eines Befehls an zwei andere Befehle weitergeleitet werden?
-
8
Benennen Sie eine Gruppe von Dateien mit einem Befehl um
-
2
Warum aktualisiert sich mein Pfad nicht * jetzt *?
-
5
Wie entferne ich einen symbolischen Link zu einem Verzeichnis?
-
8
Rette mich vor dem Kauderwelsch
-
9
Wie kann ich jeder Zeile einer Textdatei eine Zeilennummer und einen Tabulator voranstellen?
-
1
Wann sollte ich Konfigurationen in .bashrc vs einfügen? .bash_profile?
-
1
Umleitung: Wie kam das zusätzliche Wort in die Datei?