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 之类的编码,这样那些特殊字符就不是问题了。
我有 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 之类的编码,这样那些特殊字符就不是问题了。