Executa todos os scripts em uma pasta em segundo plano

5

Eu quero executar todos os scripts em um diretório ao mesmo tempo.

Eu sei que posso obter uma lista de todos os scripts e executar o primeiro em um diretório com 'ls ./*.sh', mas não consigo executar todos eles.

Eu também tentei a expansão de chaves {./*.sh; } mas também correu apenas o primeiro script.

Depois de descobrir como executar todos eles, quero executá-los em segundo plano.

Eu sei que provavelmente posso fazer isso com um loop for, mas eu esperava que houvesse um simples liner usando expansão globbing ou brace que faria o trabalho simplesmente.

Como posso fazer isso?

    
por soandos 11.12.2016 / 07:38

5 respostas

7
for script in ./*.sh; do "$script" & done
wait

Ou para limitar o número de invocações simultâneas, com o GNU xargs :

xargs -n1 -P5 -r0a <(printf '%s
autoload zargs # best in ~/.zshrc
zargs -n1 -P5 ./*.sh -- command
' ./*.sh) env

(cuidado, presume-se que os nomes dos scripts não contenham = caracteres).

Ou com zsh :

parallel -j0 exec ::: ./*.sh

(aqui no máximo 5 de cada vez).

Tenha em atenção que, se esses scripts produzirem qualquer resultado, poderão acabar por ficar mal intercalados. O GNU parallel endereça isso armazenando a saída de cada comando em um arquivo temporário separado e enviando-os em ordem:

for script in ./*.sh; do "$script" & done
wait

( -j0 para executar todos eles em paralelo, remova para limitar o número de núcleos da CPU ou especifique o número).

    
por 11.12.2016 / 10:57
1

você pode executar todos os scripts em uma pasta, passando a pasta para o comando run-parts :

run-parts /path/to/folder &
    
por 11.12.2016 / 10:35
0

Execute cada script de shell em segundo plano.

sh -x script1.sh & sh -x script2.sh & sh -x script3.sh & 
  • Execute cada script no modo de segundo plano para que o próximo comando seja executado sem esperar que o comando atual seja concluído.

  • '&' faz com que os scripts sejam executados em segundo plano para que o prompt não espere que ele seja concluído

por 11.12.2016 / 08:09
0

Você pode executar qualquer arquivo executável em segundo plano adicionando & ao final da chamada. exemplo inimigo:

./executbaleFile [args] &

Mas quando você fizer isso apenas se fechar a sessão ou sair do terminal, enviará um SIGHUP para o processo que você está executando.

Se você quiser que o processo continue funcionando mesmo se você fechar o terminal, você terá que usar o comando nohup . por exemplo:

nohup ./executbaleFile [args] &

isto permitirá que o processo funcione mesmo depois de fechar o terminal.

Ou use disown ., ele remove o trabalho da lista de tarefas do shell, portanto, ao finalizar o shell, ele não enviará SIGHUP para o processo.

    
por 11.12.2016 / 08:35
-1

Execute os scripts em segundo plano:

./myscript.sh & ./myscript2.sh & ....
    
por 11.12.2016 / 08:11