Use & (e comercial) no loop bash de linha única

51

Eu tenho usado esse comando com sucesso, o que altera uma variável em um arquivo de configuração e executa um script Python em um loop:

for((i=114;i<=255;i+=1)); do echo $i > numbers.txt;python DoMyScript.py; done

Como cada DoMyScript.py leva cerca de 30 segundos para ser executado antes de terminar, eu gostaria de relegá-los ao plano de fundo enquanto o próximo pode ser gerado.

Já experimentei o que estou familiarizado, adicionando um e comercial como abaixo:

for((i=114;i<=255;i+=1)); do echo $i > numbers.txt;python DoMyScript.py &; done

No entanto, isso resulta no erro abaixo:

-bash: syntax error near unexpected token ';'

    
por WP2Static.com 20.09.2013 / 21:25

3 respostas

68

Elimine o ; após & . Este é um requisito sintático

for((i=114;i<=255;i+=1)); do echo $i > numbers.txt;python DoMyScript.py & done
    
por 20.09.2013 / 21:34
11

Dado o comentário de Stephane na resposta do 1_CR , você provavelmente vai querer:

for i in {114..255}; do { echo $i > numbers.txt && python DoMyScript.py; } & done
    
por 21.09.2013 / 01:40
7

Perca o ; :

for((i=114;i<=255;i+=1)); do echo $i > numbers.txt;python DoMyScript.py & done
    
por 20.09.2013 / 21:34