Make:Snippet无法按预期工作

时间:2010-11-03 12:16:45

标签: linux bash scripting makefile

我正在尝试在Makefile中执行以下操作。出于某种原因,我无法让它正常工作:

  1. 获取文件的第一行
  2. 检查该行是否以'/'
  3. 开头
  4. 如果该行没有,则在文件
  5. 中的每一行前面添加一个路径

    这是我的代码:

    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命令,我会得到文件的第一行。

1 个答案:

答案 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)