Iniciar seus scripts em segundo plano evitará que o loop espere e faça exatamente o que você deseja:
while read -r line; do
(bash "$line" >>"$LAUNCHLOG") &
done <<< "$FILES"
Os logs serão misturados no seu arquivo de log embora ...
Eu tenho uma pasta de .command
files (tarefa regular) no Mac OS X, que gostaria de executar simultaneamente.
No momento, tenho percorrido cada arquivo no diretório, um por um, para executá-lo. usando algo como:
#!/bin/bash
LAUNCHLOG=~/Desktop/My\ Automation/Resources/Logs/_AutoLaunchAgent.txt
mkdir -p ~/Desktop/My\ Automation/Resources/Logs/
mkfile -n 0k "$LAUNCHLOG"
chmod 0777 "$LAUNCHLOG"
FILES='find -f ~/Desktop/My\ Automation/Resources/Temp/';
while read -r line; do
"$line" >>"$LAUNCHLOG"
done <<< "$FILES"
sleep 10
O acima está funcionando, mas é bem lento ... Por questões de velocidade, eu gostaria de executar os comandos (todos os itens no meu diretório) de uma só vez.
Os comandos são independentes uns dos outros e não precisam se comunicar, e se eu fizer isso manualmente tudo funciona corretamente e eu recebo um grande aumento de velocidade ...
Qual é a melhor maneira de conseguir isso? Eu tentei usar parênteses dentro do meu loop while em uma tentativa de executar dentro de um novo subshell em cada iteração, mas o processo ainda estava executando um arquivo de cada vez.
Iniciar seus scripts em segundo plano evitará que o loop espere e faça exatamente o que você deseja:
while read -r line; do
(bash "$line" >>"$LAUNCHLOG") &
done <<< "$FILES"
Os logs serão misturados no seu arquivo de log embora ...
Por que não tentar /usr/sbin/periodic
? Você pode usar o periodic.conf para controlar seu log ou redirecionar a saída para um arquivo de log.
/usr/sbin/periodic ~/Desktop/My\ Automation/Resources/Temp/ >> /path/to/logfile