Agrupamento de Comandos

0

Eu entendo que o e comercial & no final de uma sequência de comandos o executa no plano de fundo (em "paralelo"), o ponto-e-vírgula ; permite sequencial (em "série") e o parêntese permite agrupamento de comandos .

Suponha que eu tenha um arquivo bash com alguns comandos:

#!/bin/bash
cmd1
cmd2
cmd3
cmd4

Se eu quiser aplicar o agrupamento de comandos, por exemplo, executar os dois primeiros em paralelo, espere e execute os dois próximos em paralelo, devo colocar?:

#!/bin/bash
( \
cmd1 &
cmd2 &
); \
( \
cmd3 &
cmd4 & 
)

ou tudo deve ser obrigatório em uma única linha?

#!/bin/bash
(cmd1 & cmd2 &);(cmd3 & cmd4 &)

ou usando o caractere de linha continuar em todos os lugares?

#!/bin/bash
( \
cmd1 & \
cmd2 &); \
( \
cmd3 & \
cmd4 & )
    
por Brethlosze 29.11.2017 / 15:59

1 resposta

3

simplesmente use & e wait

cmd1 &
cmd2 &
wait
cmd3 &
cmd4 &
wait

espera aguardará pelo processo de backgroup.

quanto à continuação de linha, use apenas ( e ) , observe que isso é útil somente se você tiver redirecionamento.

(
cmd1 &
cmd2 &
wait
) > some-log.A
(
cmd3 &
cmd4 &
wait
) > some-log.B

observe que sem wait , a subshell retornará imediatamente.

date ; (
> sleep 20 &
> sleep 10 &
> ) ; date
Wed Nov 29 16:08:15 CET 2017
Wed Nov 29 16:08:15 CET 2017

comparado a

date ; (
> sleep 20 &
> sleep 10 &
> wait
> ) ; date
Wed Nov 29 16:10:08 CET 2017
Wed Nov 29 16:10:28 CET 2017
    
por 29.11.2017 / 16:05