我编写了一个脚本来查找所有具有特定名称的正在运行的 docker 容器,当我直接将其键入我的终端时它可以工作,但是一旦我将其放入 Makefile,它就会抛出错误
/bin/sh: 1:替换错误
这是生成文件中的脚本:
remote: FORCE
docker ps -q --filter name=$$(tmp=$${PWD##*/} && printf "%s_workspace" "$${tmp//./}")
为了澄清 name= 之后的块在做什么,它试图获取当前文件夹名称并删除所有 ."并将其附加到我的容器名称(即工作区(。
/bin/sh
不支持您使用的替换运算符。您需要告诉make
改用bash
:
SHELL := /bin/bash
如果您想保持配方与 POSIX 兼容,请改用tr
:
remote: FORCE
docker ps -q --filter name=$$(printf '%s_workspace' "$${PWD##*/}" | tr -d .)
如果您使用的是 GNUmake
,您可能希望使用
remote: FORCE
docker ps -q --filter name=$(subst .,,$(notdir $(PWD)))_workspace
而是让make
到所有字符串处理本身。