Синтаксическая ошибка для цикла for при перенаправлении вывода в файл в фоновом режиме

7

Я пытаюсь проанализировать некоторые файлы журналов с помощью скрипта, и поскольку все они могут быть проанализированы независимо, я пытаюсь запустить их в фоновом режиме. Я использую следующую команду, но я получаю синтаксическую ошибку, указанную сразу после:

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 ';'

Хотя, если я запускаю скрипт run_parser.sh отдельно один за другим без цикла, он работает нормально. Что-то вроде:

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

работает отлично.

Кроме того, я ранее пробовал:

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

, который также работал, но перенаправление вывода не работало, и все печаталось на экране.

    
задан Wajahat 22.03.2017 в 09:44
источник

2 ответа

6

Вы должны поместить команду фона в () следующим образом:

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
    
ответ дан Yaron 22.03.2017 в 10:02
источник
6

Вам не нужен ; после & , сам & действует как разделитель команд. См. Раздел «Список команд» в Справочном руководстве Bash .

Это выполнит три одновременных ping :

ping -c 3 askubuntu.com & ping -c 3 askubuntu.com & ping -c 3 askubuntu.com &
    
ответ дан xenoid 22.03.2017 в 10:03
источник

Ознакомьтесь с другими вопросами по меткам