/ bin/sh:1:错误的替换Makefile

Hir*_*del 3 bash shell makefile docker

我编写了一个脚本来查找所有正在运行的具有特定名称的docker容器,当我直接将它输入到我的终端时它可以工作但是只要我把它放到Makefile就会抛出一个错误

/ bin/sh:1:错误的替换

这是makefile中的脚本:

remote: FORCE
   docker ps -q --filter name=$$(tmp=$${PWD##*/} && printf "%s_workspace" "$${tmp//./}")
Run Code Online (Sandbox Code Playgroud)

为了澄清name =正在做什么之后,它正在尝试获取当前文件夹名称并删除所有.并将其附加到我的容器名称即工作空间.

che*_*ner 6

您不支持使用的替换运算符/bin/sh.你需要告诉make使用bash:

SHELL := /bin/bash
Run Code Online (Sandbox Code Playgroud)

如果您想保持配方POSIX兼容,请tr改用:

remote: FORCE
        docker ps -q --filter name=$$(printf '%s_workspace' "$${PWD##*/}" | tr -d .)
Run Code Online (Sandbox Code Playgroud)

如果您使用的是GNU make,则可能需要使用

remote: FORCE
        docker ps -q --filter name=$(subst .,,$(notdir $(PWD)))_workspace
Run Code Online (Sandbox Code Playgroud)

而是让make所有的字符串处理本身.