Использование команд Bash во вложенных циклах в Makefile

476
Umar

Я хочу использовать команды bash во вложенных циклах в make-файле, мой текущий код не работает. Может ли кто-нибудь направить меня, в чем может быть проблема. Я написал простой код в тестовой цели. Здесь я хочу перейти в каталог DIR_S / case1 и скопировать файл rtt.csv в другой каталог DIR_D / rtt /.

test:  cn=1; while [[ $$cn -le 2 ]] ; do \ echo $$cn ; \ ((cd $(DIR_S)/case\ $$cn)) ; \ ((cp rtt.csv $(DIR_D)/rtt/)) ; \ ((cn = cn + 1)) ; \ done 

Нет ошибки при запуске, но я вижу это сообщение и строка не выполняется

/bin/sh: ((: cd /Users/Umar/Desktop/dummy1/case 1: division by 0 (error token is "/Umar/Desktop/dummy1/case 1") 

Я заметил, что если

cd /Users/Umar/Desktop/dummy1/case 1 

в командной строке это не будет работать из-за пробела, я также обновил приведенную выше строку

((cd $(DIR_S)/case\ $$cn)) ; \ 

в

((cd $(DIR_S)/case\\ $$cn)) ; \ 

но все же эта строка не выполняется. Может кто-нибудь подсказать мне, как использовать команды bash во вложенных циклах в Makefile. (Я упомянул вложенные циклы, поскольку собираюсь добавить еще один цикл после этого цикла)

0

1 ответ на вопрос

0
Umar

Проблема, казалось, была решена, когда я использую команды bash без ((и)).

Использование `((` для _arithmetic_, в то время как `(` для _subshell_. Использование одиночного `('хорошо, если вы хотите изменить каталог и безоговорочно вернуться в нужное место в конце subshell. Помните, что арифметика выполнена в subshell теряется при возврате subshell ... levif 8 лет назад 0