Linux Make:代码段未按预期工作
我正在尝试在Makefile中执行以下操作。由于某些原因,我无法使其正常工作:Linux Make:代码段未按预期工作,linux,bash,scripting,makefile,Linux,Bash,Scripting,Makefile,我正在尝试在Makefile中执行以下操作。由于某些原因,我无法使其正常工作: 获取文件的第一行 检查行是否以“/”开头 如果该行没有,则在文件中每一行的前面加上一个路径 以下是我的代码: if test $${$(shell head -n 1 ./root/lib/modules/$(KERNEL_VERSION)/modules.dep):0:1} -ne '/' then \ cat ./root/lib/modules/$(KERNEL_VERSION)/modules.dep
if test $${$(shell head -n 1 ./root/lib/modules/$(KERNEL_VERSION)/modules.dep):0:1} -ne '/' then \
cat ./root/lib/modules/$(KERNEL_VERSION)/modules.dep | while read line; do echo "/lib/modules/$(KERNEL_VERSION)/$$line"; done > /tmp/modules.dep.new; \
cp /tmp/modules.dep.new ./root/lib/modules/$(KERNEL_VERSION)/modules.dep; \
rm /tmp/modules.dep.new; \
fi
head命令不返回任何内容。如果我单独运行head命令,我将获得文件的第一行。如果测试a-ne b方法有效,我无法获得您的
(shell脚本不是我最擅长的方法),但我个人会这样做:
FILE = ./root/lib/modules/$(KERNEL_VERSION)/modules.dep
PREFIX = /lib/modules/$(KERNEL_VERSION)
foo:
sed -i -e 'H;$$!d;x;s/.//;/^\//!{s|^|$(PREFIX)|;s|\n|\n$(PREFIX)|g}' $(FILE)
编辑:
想想看,这有点优雅:
sed -i '1{h;s/\(.\).*/\1/;s/\//a$(PREFIX)/;s/.//;x};H;g;s/\n.*//;x;s/\n//' $(FILE)
编辑:
等等,这更好:
@sed -i '1{/^\//!{x;s/^/$(PREFIX)/;x}};G;s/\(.*\)\n\(.*\)/\2\1/' $(FILE)
没有真正解决您的问题,但是如果您将头部替换为“sed 1q”,会发生什么?可能有助于缩小问题的范围。此外,are=you suare cwd在您认为的位置,并且定义了KERNEL_版本?@Paul:如果他可以得到文件的第一行,那么路径几乎肯定是正确的(cwd正确,KERNEL_版本定义)。这不一定是因为他在单独运行head命令时只得到了第一行(“如果我单独运行head命令,我会得到文件的第一行。”)而在Makefile中运行时,他什么也得不到(“head命令不会返回任何内容”)@Paul:你说得对,我误解了那一行。