У меня есть этот make-файл:
SHELL := /bin/bash -f
working :
if [ -d ffprob_runfail ]; then echo "gotcha" ;fi
error :
if [ -d ffprob_* ]; then echo "gotcha" ;fi
Выполнение команды 'make working' в папке, где существует подкаталог 'ffprob_runfail', повторяет:
if [-d ffprob_runfail]; тогда эхо "готча" фи
Гоча
Выполнение 'make error' в той же папке повторяет:
if [-d ffprob_ *]; тогда эхо "готча" фи
Я не уверен, откуда происходит это «удивительное» поведение - либо неправильное кодирование в синтаксисе make, либо в bash. Я пытался убежать *, но не получилось. Может ли быть проблема с синтаксисом оператора [] bash? (Я совсем новичок в bash, после 20 лет боли в csh ...)
Любая подсказка приветствуется.
РЕДАКТИРОВАНИЕ ПОЧТЫ:
Не только опция -f отключает глобирование (спасибо @choroba), но и оператор -d в bash является унарным и не может использоваться безопасно с глобализацией, т. Е. См. Скрипт Bash Shell: подтвердите существование одного или больше каталогов .
Так что, похоже, это правильный путь (продолжение предыдущего make-файла ...):
right :
for item in ffprob_* ; do if [ -d "$$item" ] ; \
then echo "gotcha $$item";fi;done