2013-11-21 3 views
1

Cant получить эту работу, испробовали все для условных [] Баш скобках цитаты и т.д.Shell условно в Makefile

КРП $$? ! = "0" никогда не совпадает, а $$? не равняется нулю. Есть идеи ?

test: testdrivers 
[email protected]=0; \ 
    for file in $(TSTFILES); do \ 
    ./$$file; \ 
    if $$? != "0" ; then \ 
    echo test fail;\ 
       rc=`expr $$rc + 1` ;\ 
    fi \ 
    done; \ 
    echo; echo "Tests failed: $$rc" 

ответ

5

Правильный синтаксис для численного сравнения в сценарии оболочки является:

if [ $$? -ne 0 ]; then 

Будьте уверены у вас есть пробелы до и ПОСЛЕ квадратные скобки. Они не могут быть в том же слове, что и аргументы.

Также вы пропустили точку с запятой после fi:

fi; \ 
done; \ 
+1

я, наверное, скажем что-то вроде «по обе стороны от квадратной скобки и перед закрытием» вместо «с»): ', как вы использовали, идеально y штраф. Хотя я дам, что это, безусловно, менее содержательно. –

+0

Хех. Хорошая точка зрения. Я все о силе! – MadScientist

+0

Было бы неплохо сказать, что '[' на самом деле та же внешняя программа, что и 'test' (хотя она, вероятно, будет встроена в большие оболочки). Итак, 'мужской тест'. – keltar

0

Использование ниже одного в качестве примера:

SHELL=/bin/bash 
abc=all 
all: 
    @ echo $(SHELL) 
    @if [ [email protected] == $(abc) ]; then echo hi; fi; 
    @echo done 

выход будет:

/bin/bash 
hi 
done 
Смежные вопросы