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
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.
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
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 &