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


58

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

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

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

Tentei 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: erro de sintaxe próximo ao token inesperado `; '

Respostas:


85

Solte o ;depois &. Este é um requisito sintático

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

11
Droga, 43 segundos demasiado lento :)
Martin von Wittich

2
@MartinvonWittich, um +1 a sua resposta por meio de comiseração ;-)
Iruvar

4
Embora isso responda à pergunta, provavelmente não é o que o OP deseja, no momento em que todas as instâncias do python foram iniciadas e inicializadas, todas elas verão uma numbers.txtcontenção 255.
Stéphane Chazelas

11
Concordou com @StephaneChazelas, mas não sei ao certo o que podemos fazer sobre isso com as informações fornecidas na pergunta. Uma solução adequada para isso provavelmente precisa de mais contexto.
um CVn 20/09/2013

3
Aqui é a referência manual do bash: gnu.org/software/bash/manual/bashref.html#Lists
glenn jackman

14

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

for i in {114..255}; do { echo $i > numbers.txt && python DoMyScript.py; } & done

Obrigado Glenn. Eu tentei algumas variações do seu código que eu gosto devido à maior legibilidade, mas talvez devido ao sono extra que eu precisava, não estava funcionando para mim. Ele também repetiria o último número no forintervalo ... Aqui está o que eu estou feliz no momento: for((i=1;i<100;i+=1)); do echo $i > numbers.txt;sleep 3; python DoMyScript.py & doneO principal ponto de interrogação da execução do processo em segundo plano está resolvido.
Ljs.dev 21/09/2013

* é claro, eu tinha <=na pergunta original, então o intervalo que você forneceu foi totalmente adequado com base nas informações que forneci. Mais uma vez, obrigado pela abordagem diferente
ljs.dev 21/09/13

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.