Eu executo este comando:
ls -1 | xargs -I% -n1 -P8 myprogramm -s1 -r5 -q -o %.dat %
ele funciona com 8 execuções ao mesmo tempo, a -q
opção no meu programa para sair, está ok, então.
mas adicionarei algo assim ; echo %
para se tornar o nome de saída na tela se a execução do programa for concluída, para cada execução.
Eu executo este comando:
ls -1 | xargs -I% -n1 -P8 myprogramm -s1 -r5 -q -o %.dat % ; echo %
Não vejo erros, mas a saída não é o que eu queria.
vejo que depois que todas as execuções são concluídas no bash, apenas uma nova linha com apenas um sinal,%
mas terei a saída como:
file1
file2
file3
...
%
= fileN é que com xargs roda os jobs, como fica essa saída?
O shell interpreta o
;
como um separador de comando antes mesmo dexargs
ser executado, então ele executaxargs
e depois executa oecho %
.O argumento para
xargs
é um comando para executar, não uma lista de comandos. Se você precisa executar vários comandos, escreva-os em um script e execute-o a partir dexargs
.Além disso, analisar a saída de
ls
é, na maioria das vezes, errado. Não funciona corretamente para nomes de arquivo que contêm espaços em branco.Que tal:
Exemplo:
Você também pode soltar %:
Remova
echo
antesmyprogramm
de realmente executá-lo.Lembre-se também: Por que *não* analisar `ls` (e o que fazer em vez disso) ?