Первое правило задавать вопросы по SO: всегда включает введенную вами команду и полученный вами результат, вырезанный и вставленный в ваш вопрос. Если выходные данные слишком длинные и беспорядочные, чтобы включать их, то по крайней мере всегда включайте фактическую ошибку или неправильный вывод, который вы получили, и несколько строк до и после него для контекста.
Первое правило написания make-файлов: никогда добавляйте @
, пока ваш make-файл не заработает полностью. Вы стреляете себе в ногу, скрывая важные детали. В качестве альтернативы прочитайте http://make.mad -scientist.net / manage-recipe-echoing / для другого способа обработки этого.
Второе правило написания make-файлов: всегда убедитесь, что ваши команды работают, когда вы вводите в командной строке оболочки, прежде чем пытаться добавить ее в рецепт make-файла.
Я не знаю много о докере, но я подозреваю, что это проблема цитирования оболочки, а не проблема make ... Я подозреваю, что эта команда не будет работать, если вы вырезаете и вставляете в приглашение оболочки. Это потому, что я думаю, что вы цитируете неправильно.
Попробуйте вместо этого (обратите внимание на другое цитирование команды mysql):
mysql-create-db:
@docker-compose exec -T mysqldb mysql -u"$(MYSQL_USER)" -p"$(MYSQL_PASSWORD)" -e "'create database abcd'"
Это гарантирует, что последняя команда представляет собой одно слово, которое включает кавычки.