Проблема в Makefile forloop break оператор - PullRequest
0 голосов
/ 29 сентября 2019
print:
    @for number in 10 11 12 13 14 15; do \
        ( echo "Number: $$number" ); \
        ( break ); \
        ( echo Break not working ); \
    done

Вывод, который я получаю

Number: 10
Break not working
Number: 11
Break not working
Number: 12
Break not working
Number: 13
Break not working
Number: 14
Break not working
Number: 15
Break not working

Вывод, который мне нужен:

Number: 10

1 Ответ

1 голос
/ 29 сентября 2019

В опубликованном коде цикл for выполняется в оболочке (bash?), А не утилитой make.

Проблема скрипта bash заключается в том, что оператор breakработает в подпроцессе - так как он помещен в круглые скобки '(перерыв).Согласно руководству по bash, команды потока управления (пока, если, для, возврат, ...) должны выполняться в "основном" процессе.Невозможно разделить их по процессам.

Удаление '(' должно решить проблему - цикл остановится после печати 'Number: 10'.

print:
    @for number in 10 11 12 13 14 15; do \
        ( echo "Number: $$number" ); \
        break ; \
        ( echo Break not working ); \
    done

Как сторонаобратите внимание, нет необходимости помещать операторы 'echo' в '(...)'. Это делает сценарий форк ненужными экземплярами o bash.

...