我正在尝试创建一个 Makefile 目标,它首先检查我的 Docker 容器是否存在。如果它存在,那么我想发出 Docker Container Restart 命令,否则我想发出 Docker Run 命令来创建和启动容器。
我已对以下内容进行编码,但出现如下所示的错误。结果 = 1 是正确的,因为我确实有一个容器正在运行。我已经移除了容器并测试结果变为 0,这也是正确的。问题似乎是当我尝试在ifeq
语句中使用结果时。有人可以告诉我我做错了什么吗?(我在调试时暂时注释掉了 docker 命令并用 echo true / false 替换了它们)。
start_docker_myapp:
result = $(shell (docker ps -a | grep myapp ) | wc -l )
ifeq (${result}, 1)
@echo 'true'
# docker restart ${IMAGE}
else
@echo 'false'
# docker run -v ${DIR}/var/log/docker:/var/log/myapp -p 1812:1812/udp -p 1813:1813/udp --detach --name ${IMAGE} $(REGISTRY)/$(IMAGE):$(TAG)
endif
Run Code Online (Sandbox Code Playgroud)
终端输出
Run Code Online (Sandbox Code Playgroud)$ make start_docker_myapp result = 1 make: result: No such file or …
bash>BRANCH_NAME="My/Test/Branch/Name"
bash>if [ -n "${BRANCH_NAME}" ]; then echo ${BRANCH_NAME}; else echo "latest"; fi
Run Code Online (Sandbox Code Playgroud)
结果
bash>"My/Test/Branch/Name"
Run Code Online (Sandbox Code Playgroud)
它的目的是什么-n
,我在哪里可以找到有关它的一些文档?我猜测该标志正在检查空字符串或空字符串。