(Convenção - .txt
são apenas arquivos de texto simples.% arquivos.sh
são arquivos de script de shell.).
Seu script mainscript.txt tem uma condição de corrida. Especificamente, o loop while inicia sua próxima iteração antes que o script script044.txt seja capaz de criar o arquivo temporário. Na verdade, todo o loop é iterado antes de qualquer um desses arquivos ser criado.
Uma maneira mais robusta de lidar com esse tipo de coisa é esquecer os arquivos temporários e usar o shell incorporado em wait
:
#!/bin/bash
pid_count=0
for counter in $(seq 1 5)
do
xterm -e "bash script044.txt" &
if (( ++pid_count > 2 )); then
wait -n
((pid_count--))
fi
done
Isso incrementa um contador toda vez que um subprocesso é iniciado. Se o contador for maior que 3, então wait
para o próximo subprocesso terminar. Quando wait
retorna, então decrementamos o contador e contornamos novamente para iniciar o próximo xterm.
Você pode remover todas as linhas relacionadas a tempfilename
do script044.txt - elas não são mais necessárias.
Como aponta @chepner, a opção necessária -n
está disponível apenas no bash 4.3 ou posterior.