我必须执行此操作,但仍无法正常工作(即,将所有内容放在一行中):
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/
。
答案 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脚本文件一样工作。