Selon la page de manuel, xargs se fermera si l'une des lignes d'exécution se termine avec une erreur de 255:
Si une invocation de la commande se termine avec un état de 255, xargs s'arrêtera immédiatement sans lire aucune autre entrée. Un message d'erreur est émis sur stderr lorsque cela se produit.
Comment puis-je obtenir des xargs pour ne pas faire cela?
J'ai un travail par lots d'environ 1500 lignes que je veux exécuter, 50 lignes à la fois. Je trouvais qu'il mourait toujours à une certaine ligne et ne terminait pas le travail. Pas bon!
Une question encore meilleure, la question décrivant ce que j'essaie de faire, est:
Comment puis-je exécuter un script de traitement par lots de 1500 lignes, 50 lignes à la fois, afin qu'il ne quitte pas le travail au milieu et que la sortie soit capturée dans un fichier journal quelconque?
sh -c
wors pour moi!Vous pouvez écrire votre invocation xargs pour masquer les codes retour de vos lignes de commande. Avec quelque chose comme ce qui suit,
xargs
ne verra jamais les codes de sortie renvoyés par une commande :la source
Je viens de trouver une réponse amusante à celle-ci, bien que son utilité dépendra de la commande que vous essayez d'exécuter.
Si vous utilisez xargs pour assembler une liste de commandes, vous pouvez obtenir ce comportement en disant à xargs de faire écho à la commande, puis de diriger vers bash.
Par exemple, si vous essayez de supprimer une liste de choses qui peuvent ou non exister:
Cela fonctionne parce que, d'abord, xargs n'appelle que echo, donc il ne verra aucune erreur. Ensuite, parce que le comportement par défaut de bash pour continuer l'exécution après une instruction ayant échoué.
Pour être plus précis sur mon cas, j'utilisais cela pour supprimer un tas d'anciennes versions d'application d'AWS ElasticBeanstalk comme ceci:
la source
Travaux de construction suivants pour moi:
Même si la mise à niveau svn a échoué sur un élément, le processus s'est poursuivi
la source
Si vous utilisiez
xargs
avecfind
, utilisez plutôt l'-exec
optionfind
:la source
xargs
pouvait exécuter des commandes en parallèle. Cool. Si vous voulez seulement minimiser le nombre d'appels de commandes,-exec
a un+
paramètre.