而读取行不适用于带有makefile的mac

时间:2019-05-26 04:23:50

标签: bash macos makefile readline

我必须执行此操作,但仍无法正常工作(即,将所有内容放在一行中):

commit:
  cat data/commit-folders.csv | while read line; do git add $line/; git commit $line/ -m 'Autocommit'; git push origin master; done
.PHONY: commit

由于某种原因,$line显示为ine,而我尝试了$(line),但还是没有。我也想将其放在多行中,但还没有弄清楚。

commit:
  cat data/commit-folders.csv | while read line \ 
    do
      -git add $line
      -git commit $line/ -m 'Autocommit'
      -git push origin master
    done

-上的-git用于Makefile忽略命令中的错误。我想在这种情况下尽可能保持这种行为。

基本上,我正在尝试读取每行只有一个路径的CSV文件(如foo/bar/baz之类的文件夹),并且我想用斜杠提交foo/bar/baz/

1 个答案:

答案 0 :(得分:2)

  

由于某种原因,$ line显示为ine,我已经尝试过$(line)

$首先由make扩展。因此,$line被读取为${l}ine,并且由于${l}在makefile中未定义,因此其结果为ine

${line}也会扩展为空,因为在您的情况下,它应该是shell的变量,而不是make的变量。

因此正确的解决方案是$$line,首先(通过make)将其扩展为$line,然后(通过shell)将其扩展为正确的值。

  

我也想将其放在多行上,但是还没有弄清楚。

借助GNU,您可以使用.ONESHELL:

.ONESHELL:
commit:
    cat data/commit-folders.csv | while read line \ 
    do
        git add $$line
        git commit $$line/ -m 'Autocommit'
        git push origin master
    done
    exit 0
  

-git上的-用于使Makefile忽略命令中的错误

当您不使用 .ONESHELL时,这是必需的。使用.ONESHELL,基本上可以像执行shell脚本文件一样工作。