No shell não interativo, você não tem controle total de tarefas. Quando você inicia jobs
na substituição do comando, ele é executado em uma subchave. Nesta sub-linha, não há empregos em execução, você não tem nada.
No shell interativo, o MONITOR foi definido , deu a você controle de empregos completos. Nesse caso, zsh
armazena todos os trabalhos em uma tabela quando você insere um subshell e usará essa tabela se não houver trabalhos em subshell.
Com zsh
4.3 e acima, você pode ativar o controle de tarefas em um shell não interativo colocando -m
na linha shebang:
#!/usr/bin/zsh -m
ou usando setopt
:
setopt monitor
: The rest of script goes here
Uma maneira melhor de verificar o estado do trabalho pode ser:
#!/usr/bin/zsh
zmodload zsh/parameter
babel www/scripts6/lib/data.js > www/scripts/lib/data.js &
babel www/scripts6/lib/user.js > www/scripts/lib/user.js &
babel www/scripts6/lib/profile.js > www/scripts/lib/profile.js &
babel www/scripts6/lib/d3-and-svg.js > www/scripts/lib/d3-and-svg.js &
babel www/scripts6/main.js > www/scripts/main.js &
while (( ${#jobstates} )); do
print "moo"
done
De qualquer forma, você pode esperar por todos os processos filhos com aguardar :
babel www/scripts6/lib/data.js > www/scripts/lib/data.js &
babel www/scripts6/lib/user.js > www/scripts/lib/user.js &
babel www/scripts6/lib/profile.js > www/scripts/lib/profile.js &
babel www/scripts6/lib/d3-and-svg.js > www/scripts/lib/d3-and-svg.js &
babel www/scripts6/main.js > www/scripts/main.js &
# Wait for all children
wait
echo END