我正在尝试在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 | 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命令,我会得到文件的第一行。
答案 0 :(得分:0)
我无法让你的if test 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)