/bin/sh: 1:错误的替换生成文件



我编写了一个脚本来查找所有具有特定名称的正在运行的 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到所有字符串处理本身。

最新更新