linux - 使 : Snippet not working as expected

标签 linux bash scripting makefile

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

  1. 获取文件的第一行
  2. 检查该行是否以“/”开头
  3. 如果该行没有,则为文件中的每一行添加路径

这是我的代码:

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

最佳答案

我无法让你的 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)

关于linux - 使 : Snippet not working as expected,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4086936/

相关文章:

linux - 编译时如何使用特定的库?

python - -c : line 0: syntax error near unexpected token `('

javascript - 测试对象是否是 javascript 中的 jQuery 对象的正确/正确方法是什么?

php - ImageMagick bash 脚本问题

linux - nwjs 如何在 linux 上分发应用程序?

linux - 循环不解压我的文件...代码不进入循环

bash 测试 cmd 失败,参数过多

shell - 简单的 shell 脚本可以在 cygwin 中运行,但不能在 solaris 上运行

linux - sudo : unable to excute ./blah.sh: 没有那个文件或目录

bash - 捕获 getopt 无效选项