Leite nichts zu Xargs

14

Ich habe ein Skript, das unter Umständen nichts auf stdout hat. Am Ende des Skripts übergebe ich die Zeilen, die ich habe, mit xargs an einen anderen Befehl. Mein Problem ist, wenn es nichts auf stdout gibt, erhalte ich die typische Fehlermeldung "Verwendung: Programm arg1 arg2".

Wie kann ich das vermeiden?

Richard
quelle
8
Bewegen Sie Ihr "EDIT" in eine Antwort und akzeptieren Sie Ihre eigene Antwort. Auf diese Weise werden Ihre Entdeckungen für andere Personen nützlich sein. meta.unix.stackexchange.com/questions/809/…
andcoz
1
Hatte zu der Zeit nicht genug Punkte. Werde es jetzt tun
Richard

Antworten:

13

Sie benötigen eine -roder --no-run-if-emptyOptionen.

Denken Sie daran, dass dieses spezielle Verhalten schwer plattformübergreifend ist. BSD-Versionen xargslaufen -rstandardmäßig mit. GNU-Version braucht es. Die FreeBSD-Version von xargsignoriert das -rFlag für die Kompatibilität mit GNU. Die Mac OS X-Version akzeptiert nicht einmal das Flag und gibt einen Fehler aus illegal option.

Sie können dann eine Betriebssystemerkennung verwenden, die darauf basiert $OSTYPE, ein plattformübergreifendes Skript zu schreiben. Versuchen Sie noch besser, das Verhalten von sich xargsselbst zu erkennen . Führen Sie es mit aus, -rund wenn dies fehlschlägt (Statuscode> 0), führen Sie es ohne aus -r.

Denis
quelle
3

Eine Lektion, warum Sie die Manpages lesen sollten ...

Die -roder --no-run-if-emptyFahnen sind mein Freund.

Richard
quelle