Deixe-me começar dizendo que ainda estou aprendendo scripts bash e não estou ciente de muitas coisas. Se eu perder alguma coisa, fique à vontade para me repreender como quiser.
Em diante, estou criando um script bash simples para executar um ping em 2 hosts diferentes e gerar a saída para um arquivo. Já cuidei disso e está funcionando. Por curiosidade, adicionei no script a data de saída antes e depois da impressão da saída do ping, para saber quanto tempo demorou para executar o ping. Eu configurei o ping para intervalo de 1 segundo, 10 pings, 2 hosts. Meu primeiro encontro (foi há muito tempo...) tinha 14:36:20 como carimbo de hora. A segunda data (após o ping) tinha 14:36:40 como carimbo de hora.
Então, a data esperou que ambos os pings terminassem. Isso significa que os pings foram executados sequencialmente.
Posso fazê-los rodar simultaneamente, gastando 10 segundos executando o script em vez de 20 segundos?
Aí vem o trecho do meu script:
date >> teste.txt
cat hosts.txt | while read output
do ping -c 10 -i 1 "$output" >> teste.txt
done
date >> teste.txt
Há várias outras coisas que desejo que este script faça, mas prometo que só perguntarei se não conseguir encontrar uma resposta satisfatória no Barsa.
PS: hosts.txt é onde eu armazeno os hosts que desejo fazer ping.
Responder1
O texto da sua pergunta é um pouco difícil de entender, mas acho que você está procurando algo como:
command &
command &
wait
O script executará os dois comandos em segundo plano e aguardará a resposta.
Porém, no seu caso, você precisa ter cuidado com uma condição de corrida. Você provavelmente desejaria enviar a saída dos comandos individuais para arquivos temporários e depois catá-los no arquivo principal, então provavelmente faria algo como:
command > "${tmp1}" &
command > "${tmp2}" &
wait
cat "${tmp1}" "${tmp2}" >> "${main}"
rm -f "${tmp1}" "${tmp2}"
Atualização: você pode tentar xargs (por exemplohttps://stackoverflow.com/questions/15755422/linux-bash-script-to-ping-multiple-hosts-simultaneously)
Responder2
Com o GNU Parallel você pode fazer isso:
date >> teste.txt
cat hosts.txt | parallel -j0 ping -c 10 -i 1 {} >> teste.txt
date >> teste.txt