我想在 Makefile 中执行一些代码之前检查是否设置了环境变量。如果未设置,我想抛出一个带有简单错误消息的错误:
run:
[ -z "$(MY_APP)" ] && echo "MY_APP must be set" && exit 1
echo "MY_APP is set. Yay!"
echo "Let's continue on with the command..."
Run Code Online (Sandbox Code Playgroud)
当MY_APP未设置时,我收到以下错误,这是需要的:
[ -z "" ] && echo "MY_APP must be set" && exit 1
MY_APP must be set
make: *** [run] Error 1
Run Code Online (Sandbox Code Playgroud)
但是,何时MY_APP设置我收到以下错误:
[ -z "EXAMPLE_NAME" ] && echo "MY_APP must be set" && exit 1
make: *** [run] Error 1
Run Code Online (Sandbox Code Playgroud)
知道我做错了什么吗?有没有更好的方法来做到这一点?
回想一下,该&&条件要求所有条件都必须为TRUE才能通过。1由于第一个条件失败,整个命令将返回(-> false )状态,有效地停止 make
MY_APP您可以使用以下内容,以便仅在缺少时测试才会失败。
请注意,我使用的false是而不是exit 1. 也更好地使用"${MY_APP}",这使得从 Make 复制/粘贴到 shell 提示符/脚本变得更容易。
run:
{ [ -z "$(MY_APP)" ] && echo "MY_APP must be set" && false } || true
...
# Or just if-Then-Else
if [ -z "${MY_APP}" ] ; then echo "MY_APP must be set" ; false ; fi
...
Run Code Online (Sandbox Code Playgroud)