Como processar uma variável de ambiente delimitada por espaço com xargs

1

Estou tentando executar um processo de longa execução várias vezes em paralelo. O parâmetro para cada execução do processo é armazenado em uma variável de ambiente separada por espaço. Aqui está um exemplo artificial do que estou tentando executar:

$ echo -e 1 2 3 4 | xargs --max-procs=3 --max-args=1 --replace=% echo % is the number being processed

Aqui está a saída desse comando:

1 2 3 4 is the number being processed

Por que o max-args é aparentemente ignorado? Então tentei definir explicitamente o delimitador que fornece melhores resultados:

$ echo -e 1 2 3 4 | xargs -d " " --max-procs=3 --max-args=1 --replace=% echo % is the number being processed
1 is the number being processed
2 is the number being processed
3 is the number being processed
4
 is the number being processed

O que o xargs está fazendo quando processa o quarto argumento?

Após algumas pesquisas, consegui quase conseguir o que quero. Os argumentos são processados corretamente, mas o paralelismo não funciona (verificado com outro comando não mostrado aqui):

$ echo -e 1 2 3 4 | xargs -n 1 | xargs --max-procs=3 --max-args=1 --replace=% echo % is the number being processed
1 is the number being processed
2 is the number being processed
3 is the number being processed
4 is the number being processed

O que estou perdendo?

    
por gordo911 18.06.2013 / 13:39

1 resposta

0

echo -e 1 2 3 4 | sed -e 's/\s\+/\n/g' | xargs --max-procs=3 --max-args=1 --replace=% echo % is the number being processed

realizar a tarefa? A saída parece correta:

1 is the number being processed
2 is the number being processed
3 is the number being processed
4 is the number being processed

Eu também tentei substituir echo por sleep para confirmar que ele é executado em paralelo e:

echo -e 1 2 3 4 5 6 7 8 9 9 9 9 9 9 9 9 9 9 9 9 | sed -e 's/\s\+/\n/g' | xargs --max-procs=20 --max-args=1 --replace=% sleep 1
    
por 18.06.2013 / 14:41

Tags