De acordo com a página do manual, o xargs será encerrado se uma das linhas de execução sair com um erro 255:
Se qualquer chamada do comando sair com um status 255, o xargs será interrompido imediatamente sem ler mais nenhuma entrada. Uma mensagem de erro é emitida no stderr quando isso acontece.
Como posso obter xargs para não fazer isso?
Eu tenho um trabalho em lote de mais ou menos 1500 linhas que quero executar, 50 linhas por vez. Eu estava descobrindo que estava sempre morrendo em uma determinada linha e não concluindo o trabalho. Não é bom!
Uma pergunta ainda melhor, a pergunta que descreve o que estou tentando fazer, é:
Como posso executar um script em lotes de 1500 linhas, 50 linhas por vez, para que ele não saia do trabalho no meio e para que a saída seja capturada em algum tipo de arquivo de log?
sh -c
pior para mim!Você pode escrever sua chamada de xargs para mascarar os códigos de retorno de suas linhas de comando. Com algo como o seguinte,
xargs
nunca verá códigos de saída retornados por algum comando :fonte
Acabei de encontrar uma resposta divertida para essa, embora sua utilidade dependa do comando que você está tentando executar.
Se você estiver usando o xargs para montar basicamente uma lista de comandos, poderá obter esse comportamento dizendo ao xargs para ecoar o comando e, em seguida, canalizando para o bash.
Por exemplo, se você estiver tentando excluir uma lista de itens que podem ou não existir:
Isso funciona porque, primeiro, o xargs está sempre chamando eco, portanto, não verá nenhum erro. Segundo, porque o comportamento padrão do bash para continuar a execução após uma instrução com falha.
Para ser mais específico sobre o meu caso, eu estava usando isso para remover várias versões antigas de aplicativos do AWS ElasticBeanstalk da seguinte maneira:
fonte
Trabalhos de construção seguintes para mim:
Mesmo que a atualização svn falhe em algum elemento, o processo foi continuado
fonte
Se você estava usando
xargs
comfind
, use a-exec
opção defind
:fonte
xargs
poderia executar comandos em paralelo. Legal. Se você deseja minimizar apenas o número de chamadas de comando,-exec
possui um+
parâmetro