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

时间:2018-06-01 18:22:50

标签: bash shell docker makefile

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

  

/ bin / sh:1:错误替换

这是makefile中的脚本:

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

为了澄清name =正在执行的那个块之后,它正在尝试获取当前文件夹名称并删除所有。并将其附加到我的容器名称即工作区。

1 个答案:

答案 0 :(得分:5)

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

SHELL := /bin/bash

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

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

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

remote: FORCE
        docker ps -q --filter name=$(subst .,,$(notdir $(PWD)))_workspace

而是让make对所有字符串处理本身。