管道切割时GNU Make shell功能中断

时间:2016-03-17 08:16:10

标签: gnu-make

你好我有一个MVE,我试图连接两个变量,然后管道切割。

all:
    @echo $(APP_NAME)
    @echo $(CURRENT_BRANCH)
    @echo $(call EB_SAFE_NAME,$(CURRENT_BRANCH))
    @echo $(shell echo "$(APP_NAME)-$(call EB_SAFE_NAME,$(CURRENT_BRANCH))" | cut -c 23)

输出:

   $ cicdtest
   $ issue#13-support-multi-branch
   $ issue-13-support-multi-branch
   $ o

如果删除| cut -c 23,则输出正常,但我确实需要限制为23个字符。我在上面的第四个回声声明中做错了什么?

1 个答案:

答案 0 :(得分:0)

测试脚本中的不同行为然后在make中,但问题在于明确使用cut,而不是make。以下按预期工作:

@echo $(shell echo $(APP_NAME)-$(call EB_SAFE_NAME,$(CURRENT_BRANCH)) | cut -c 1-23)

Cut对于不完整的范围有一些处理,但在make中(即使我使用bash)需要完整的范围:

  

字节,字符和字段从1开始编号,并以逗号分隔。   可以给出不完整的范围:-M表示1-M; N-表示N到行尾或最后一个字段。

     

选项

     

-b BYTE-LIST   --bytes = BYTE-LIST        仅打印BYTE-LIST中列出的位置中的字节。标签和        退格被视为任何其他角色;他们占了1        字节。

     

-c CHARACTER-LIST   --characters = CHARACTER-LIST        仅打印CHARACTER-LIST中列出的位置中的字符。该        现在与`-b'相同,但国际化将改变这一点。        制表符和退格键与任何其他字符一样对待;他们        占用1个角色。