Unterdrücken von stderr in GNU Parallel

Unterdrücken von stderr in GNU Parallel

Ich verwende GNU Parallel, um einen Befehl mehrere tausend Mal gleichzeitig auszuführen.

Um Protokolle der Ausführung zu erhalten, verwende ich --filesund --results.

Um während der Ausführung einen schönen Fortschrittsbalken zu erhalten, verwende ich --etaund --progress.

Jetzt besteht mein Problem darin, dass STDERR zwar zu den Dateien umgeleitet wird, aber weiterhin auf dem Terminal ausgegeben wird, was meinen Fortschrittsbalken beschädigt.

Wie kann ich das Drucken von STDERR auf dem Terminal unterdrücken? Ich möchte diese Informationen trotzdem in den Protokolldateien haben, daher kann ich den Befehl nicht einfach in einschließen 2>/dev/null.

Bisher sieht meine Befehlszeile folgendermaßen aus:

cat input.txt | parallel -P 10 --progress --eta --files --results output_dir/ "./script.sh some-arg {}"

Antwort1

Wenn Sie eine schöne Bar möchten, darf ich --baranstelle von vorschlagen --eta? Sie benötigen Version 20131122 oder höher.

Dies scheint zu funktionieren, da STDERR-Dateien nicht gedruckt werden, sodass Sie auf STDERR nichts erhalten außer --bar:

cat input.txt | parallel -P 10 --bar --files --results output_dir/ "./script.sh some-arg {}" >/dev/null

Antwort2

Das hat bei mir funktioniert:

parallel --bar --jobs 10 '(ffmpegthumbnailer -i "{}" -o "/tmp/${DIR}/{}.jpg" -f 2>/dev/null)'  ::: *.mp4

verwandte Informationen