Erro de sintaxe no loop ao redirecionar a saída para o arquivo em segundo plano

7

Estou tentando analisar alguns arquivos de log usando um script e, como todos eles podem ser analisados de forma independente, estou tentando executá-los em segundo plano. Estou usando o seguinte comando, mas recebo o erro de sintaxe logo após:

for k in {2..3}; do for i in {1..3}; do for j in {1..3}; do ./run_parser.sh ${k} ${i} ${j} > parse_${k}${i}${j}.log 2>&1 &; done; done; done
-bash: syntax error near unexpected token ';'

Embora, se eu executar o script run_parser.sh individualmente, um por um sem o loop, ele será executado corretamente. Algo como:

./run_parser.sh 2 1 2 > parse_212.log 2>&1 &

funciona perfeitamente bem.

Além disso, eu tentei anteriormente:

for k in {2..3}; do for i in {1..3}; do for j in {1..3}; do ./run_parser.sh ${k} ${i} ${j} & > parse_${k}${i}${j}.log ; done; done; done

que também funcionou, mas o redirecionamento de saída não estava funcionando e tudo estava sendo impresso na tela.

    
por Wajahat 22.03.2017 / 10:44

2 respostas

6

Você deve colocar o comando background em () da seguinte forma:

for k in {2..3}; do for i in {1..3}; do for j in {1..3}; do (./run_parser.sh ${k} ${i} ${j} > parse_${k}${i}${j}.log 2>&1 &); done; done; done
    
por Yaron 22.03.2017 / 11:02
6

Você não precisa de um ; após um & , o & age como um separador de comando. Consulte a seção "Lista de comandos" no manual de referência do bash .

Isso executará três ping simultâneas:

ping -c 3 askubuntu.com & ping -c 3 askubuntu.com & ping -c 3 askubuntu.com &
    
por xenoid 22.03.2017 / 11:03