Makefile 变量将为空
Makefile variable will be empty
我在ubuntu20.04上写一个Makefile。当我在 Makefile 的第一个附加代码中写入“向上”目标并执行它时,REST_API_ID 为空,如第二个附加图像所示。 shell函数中的命令如果不使用make直接在shell中执行,可以得到想要的值,如附代码2.
我在这个 Makefile 中找不到任何错误。我需要知道如何解决的人的帮助。
up:down
>---docker-compose up -d
>---sleep 5
>---"$(MAKE)" create-api
>---REST_API_ID := $(shell awslocal apigateway get-rest-apis | jq -r '.items[] | select(.name == "queuing_slack_post") | .id')
>---echo $(REST_API_ID)
down:
>---docker-compose down
~/work/slack develop*
❯ make up && dc logs -f
docker-compose down
Stopping localstack_main ... done
Removing localstack_main ... done
Removing network slack_default
Could not connect to the endpoint URL: "http://localhost:4566/restapis"
docker-compose up -d
Creating network "slack_default" with the default driver
Creating localstack_main ... done
sleep 5
"make" create-api
make[1]: Entering directory '/home/xxx/work/slack'
awslocal apigateway create-rest-api --name queuing_slack_post
{
"id": "y5zvwj9ejc",
"name": "queuing_slack_post",
"createdDate": "2022-01-09T10:24:23+09:00",
"version": "V1",
"binaryMediaTypes": [],
"apiKeySource": "HEADER",
"endpointConfiguration": {
"types": [
"EDGE"
]
},
"tags": {},
"disableExecuteApiEndpoint": false
}
make[1]: Leaving directory '/home/xxx/work/slack'
REST_API_ID :=
make: REST_API_ID: Command not found
make: *** [Makefile:13: up] Error 127
~/work/slack develop*
❯ awslocal apigateway get-rest-apis | jq -r '.items[] | select(.name == "queuing_slack_post") | .id'
ajt8mnjewz
您出错的原因在这里:
>---REST_API_ID := $(shell awslocal apigateway get-rest-apis | jq -r '.items[] | select(.name == "queuing_slack_post") | .id')
(我假设 >---
文本代表硬 TAB 字符)。
您将 make 命令与 shell 命令混淆了:配方中的每一行(用 TAB 缩进)都传递给 shell,因此这个 make 变量赋值传递给 shell,而 shell 给你一个语法错误,因为它是无效的 shell 语法。
您不能在像这样的配方中编写 makefile 命令行,例如像这样分配 make 变量。你必须使用 shell 变量,而不是 make 变量:
>---REST_API_ID=$$(awslocal apigateway get-rest-apis | jq -r '.items[] | select(.name == "queuing_slack_post") | .id'); echo $$REST_API_ID
我在ubuntu20.04上写一个Makefile。当我在 Makefile 的第一个附加代码中写入“向上”目标并执行它时,REST_API_ID 为空,如第二个附加图像所示。 shell函数中的命令如果不使用make直接在shell中执行,可以得到想要的值,如附代码2.
我在这个 Makefile 中找不到任何错误。我需要知道如何解决的人的帮助。
up:down
>---docker-compose up -d
>---sleep 5
>---"$(MAKE)" create-api
>---REST_API_ID := $(shell awslocal apigateway get-rest-apis | jq -r '.items[] | select(.name == "queuing_slack_post") | .id')
>---echo $(REST_API_ID)
down:
>---docker-compose down
~/work/slack develop*
❯ make up && dc logs -f
docker-compose down
Stopping localstack_main ... done
Removing localstack_main ... done
Removing network slack_default
Could not connect to the endpoint URL: "http://localhost:4566/restapis"
docker-compose up -d
Creating network "slack_default" with the default driver
Creating localstack_main ... done
sleep 5
"make" create-api
make[1]: Entering directory '/home/xxx/work/slack'
awslocal apigateway create-rest-api --name queuing_slack_post
{
"id": "y5zvwj9ejc",
"name": "queuing_slack_post",
"createdDate": "2022-01-09T10:24:23+09:00",
"version": "V1",
"binaryMediaTypes": [],
"apiKeySource": "HEADER",
"endpointConfiguration": {
"types": [
"EDGE"
]
},
"tags": {},
"disableExecuteApiEndpoint": false
}
make[1]: Leaving directory '/home/xxx/work/slack'
REST_API_ID :=
make: REST_API_ID: Command not found
make: *** [Makefile:13: up] Error 127
~/work/slack develop*
❯ awslocal apigateway get-rest-apis | jq -r '.items[] | select(.name == "queuing_slack_post") | .id'
ajt8mnjewz
您出错的原因在这里:
>---REST_API_ID := $(shell awslocal apigateway get-rest-apis | jq -r '.items[] | select(.name == "queuing_slack_post") | .id')
(我假设 >---
文本代表硬 TAB 字符)。
您将 make 命令与 shell 命令混淆了:配方中的每一行(用 TAB 缩进)都传递给 shell,因此这个 make 变量赋值传递给 shell,而 shell 给你一个语法错误,因为它是无效的 shell 语法。
您不能在像这样的配方中编写 makefile 命令行,例如像这样分配 make 变量。你必须使用 shell 变量,而不是 make 变量:
>---REST_API_ID=$$(awslocal apigateway get-rest-apis | jq -r '.items[] | select(.name == "queuing_slack_post") | .id'); echo $$REST_API_ID