Как заставить GNU сделать сбой, если команда оболочки, назначенная переменной, не удалась? - PullRequest
0 голосов
/ 12 июня 2018

У меня есть переменная Make:

PASSWORD:=$(shell vault read -field=password test/password)

Если vault не установлен, make напечатает make: vault: Command not found, но продолжит выполнение рецепта.Как заставить его завершиться с ошибкой и остановить выполнение, если выражение не выполнено?

Ответы [ 2 ]

0 голосов
/ 13 июня 2018

Может быть, эта идея должна работать:

X!=lsx /

all:
ifeq (${.SHELLSTATUS},0)
    @echo OK
else
    @exit 1
endif

Например, вы можете создать check: PHONY-цель, которая нужна каждой (другой) цели.

Объяснение см. here :

После использования функции оболочки или оператора присваивания '! =' ее состояние выхода помещается в переменную .SHELLSTATUS.

X=$(shell ls /) не работает, но ИМХО должно.

0 голосов
/ 12 июня 2018

Вот один подход:

$ cat err.mk
PASSWORD:=$(shell vault read -field=password test/password)
ifndef PASSWORD
$(error PASSWORD not set (maybe vault failed?))
endif
$ make -f err.mk
make: vault: Command not found
err.mk:3: *** PASSWORD not set (maybe vault failed?).  Stop.
...