请考虑以下Make
规则。
output.txt: input-*.txt
parallel -j 16 'echo {} | awk "{print $$0}"' ::: $^
问题在于在awk中指定列号(或任何美元变量)。如果awk命令只在Makefile中(即没有提供给并行),它可以工作,但当用作并行参数时,它无法工作。
以下变体也不起作用。
parallel -j 16 'echo {} | awk "{print \$0}"' ::: $^
有人可以帮我解决这个问题吗?
答案 0 :(得分:1)
Make不关心反斜杠或引号。关注的唯一字符(在配方中)是$
,唯一的方法就是将其加倍:$$
。如果使用$$0
不起作用,则问题不在于make,而在于你的shell和/或并行。
你应该做的是在shell提示符下运行命令并让它在那里工作,无论是什么必须转义,都不要担心make。
为shell提示正确转义规则后,您可以将其剪切并粘贴到makefile配方中,并将所有$
个字符替换为$$
,这样就可以了。
查看并行手册页,看起来您使用的命令不能是内联脚本,这可能是您的版本不起作用的原因。它显然必须是一个实际的命令。也许如果您使用/bin/sh -c "echo ..."
代替它会起作用?