GNU make .env:6: *** 未终止的变量引用。停止

GNU make .env:6: *** unterminated variable reference. Stop

我有 windows 10 并安装了 GNU Make 4.3 Built for Windows32。这是我第一次使用 GNU make,它给了我这样的错误

.env:6: *** unterminated variable reference. Stop.

我的 .env 文件包含

POSTGRES_USER="postgres"
POSTGRES_PASS="<MY_DB_PASS>"
POSTGRES_DB="<MY_DB>"
PG_HOST="localhost"
PG_PORT="5432"
SECRET_KEY="<MY_SECRET_KEY>"
DEBUG=True
ALLOWED_HOSTS="localhost 127.0.0.1"

您可能认为添加引号是在自救。而且,如果这个变量被 shell 解析,那么你就是。

但是,make 不使用引号。变量的值是等号右边的完整内容(在跳过任何初始空格之后)。例如:

POSTGRES_USER="postgres"

如果由 shell 解析,POSTGRES_USER 变量的值为 postgres,因为 shell 解释引号。但是 make 不解释引号所以上面的行导致 POSTGRES_USER make 变量具有值 "postgres"(包括引号)。

现在解决你的问题。您文件的第 6 行是:

SECRET_KEY="<MY_SECRET_KEY>"

而且你没有向我们展示你的密钥文本。

首先,即使在 shell 语法中也是错误的:您必须在此处使用单引号而不是双引号,如果您的密钥本身包含单引号,那么即使这样也是不正确的;你必须逃避那个。

然而,该错误意味着在您的密钥中您有字符序列 $(${,这使得解释为开始变量引用:因为没有闭括号或大括号,您得到这个错误。

简短的回答是,如果变量赋值的值包含任何类型的特殊字符(包括空格),则无法使用由 make 和 shell 提供的同一文件。

通常人们会对他们的密钥进行 base64 之类的编码,这样那些特殊字符就不是问题了。