Ne rien rediriger vers xargs

14

J'ai un script qui peut, dans certaines circonstances, ne rien avoir sur stdout. À la fin du script, je passe les lignes que j'ai à une autre commande en utilisant xargs. Mon problème est, quand il n'y a rien sur stdout, j'obtiens le message d'erreur "Usage: program arg1 arg2" typique.

Comment puis-je éviter ça?

Richard
la source
8
Déplacez votre "EDIT" dans une réponse et acceptez votre propre réponse. De cette façon, vos découvertes seront utiles à d'autres personnes. meta.unix.stackexchange.com/questions/809/…
andcoz
1
N'avait pas assez de points à l'époque. Je vais le faire maintenant.
Richard

Réponses:

13

Vous avez besoin d'une -rou d' --no-run-if-emptyoptions.

Gardez à l'esprit que ce comportement particulier est difficile à réaliser sur plusieurs plates-formes. Versions BSD de xargsrun with -rpar défaut. La version GNU en a besoin. La version FreeBSD de xargsignore le -rdrapeau pour la compatibilité avec GNU. La version Mac OS X n'accepte même pas l'indicateur et génère une erreur illegal option.

Vous pouvez alors choisir d'utiliser une détection de système d'exploitation basée sur $OSTYPEpour écrire un script multiplateforme. Encore mieux, essayez de détecter le comportement de xargslui - même. Exécutez-le avec -ret si cela échoue (code d'état> 0), exécutez-le sans -r.

Denis
la source
3

Une leçon sur la raison pour laquelle vous devriez lire les pages de manuel…

Le -rou les --no-run-if-emptydrapeaux sont mon ami.

Richard
la source