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

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

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

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

1
задан 22 March 2017 в 13:44

1 ответ

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

Это выполнит три параллельных ping:

ping -c 3 askubuntu.com & ping -c 3 askubuntu.com & ping -c 3 askubuntu.com &
6
ответ дан 23 May 2018 в 00:24
  • 1
    Это тоже работает. – Wajahat 22 March 2017 в 14:11
  • 2
    Нет, это другой (добавление скобок для компенсации точки с запятой, которая не должна быть там в первую очередь), которая «работает тоже». :) – xenoid 22 March 2017 в 17:47

Другие вопросы по тегам:

Похожие вопросы: