Sempre que você tem vários processos saindo para o mesmo terminal (ou arquivo) em paralelo, você corre o risco de sua saída ficar intercalada (a menos que você organize algum tipo de bloqueio ou use chamadas de sistema de baixo nível como write
para arquivos abertos no modo somente anexo).
Como primeiro passo, você pode minimizar, mas não eliminar totalmente, o problema fazendo com que cada invocação de shell use substituição de comando : execute o comando whois
como um subprocesso, capturando sua saída e, em seguida, imprima tudo que foi combinado em uma operação printf
.
xargs -0 -n 1 -P 3 -I %% sh -c 'printf "\n%s\n%s\n%s\n" " 44rBegin whois record -- " "$(whois -h whois.arin.net %%)" " 44rEnd whois record -- "'
Melhor ainda, se você tiver o programa flock
disponível, poderá usá-lo para bloquear cada chamada para esse printf
:
xargs -0 -n 1 -P 3 -I %% sh -c 'who="$(whois -h whois.arin.net %%)"; flock /tmp/who.lock printf "\n%s\n%s\n%s\n" " 44rBegin whois record -- " "$who" " 44rEnd whois record -- "'