【问题标题】:Shell conditional in makefile生成文件中的Shell条件
【发布时间】:2013-12-05 23:20:13
【问题描述】:

无法让它工作,尝试了所有条件 [] bash 括号引号等

如果 $$? != "0" 从不匹配,但 $$?有时非零。有任何想法吗 ?

test: testdrivers
-@rc=0; \
   for file in $(TSTFILES); do  \
     ./$$file; \
     if  $$? != "0" ; then  \
     echo test fail;\
                 rc=`expr $$rc + 1` ;\
     fi \
    done; \
  echo; echo "Tests failed: $$rc"

【问题讨论】:

    标签: makefile sh


    【解决方案1】:

    以以下为例:

    SHELL=/bin/bash
    abc=all 
    all:
        @ echo $(SHELL)
        @if [ $@ == $(abc) ]; then echo hi; fi;
        @echo done
    

    输出将是:

    /bin/bash
    hi
    done
    

    【讨论】:

      【解决方案2】:

      shell 脚本中数值比较的正确语法是:

      if [ $$? -ne 0 ]; then
      

      确保在方括号之前有空格。它们不能与参数在同一个词中。

      另外,fi 后面缺少分号:

          fi; \
      done; \
      

      【讨论】:

      • 我可能会说“在左方括号的两侧和右方括号之前”,因为您使用的]; 非常好。虽然我承认这肯定不那么简洁。
      • 可以说[ 实际上与test 是同一个外部程序(尽管它很可能内置在大型shell 中)。所以,man test.
      • 那么还有其他问题。根据您的示例,我提供的语法肯定会起作用。 “似乎没有工作”是什么意思?你输入什么命令?你看到什么错误?请直接剪切和粘贴,而不是重新输入,因为重新输入通常会引入细微的变化,使我们无法解决问题。编辑您的问题并按照您当前的方式剪切和粘贴您的 makefile 规则。
      • 它只是与条件不匹配,我没有收到任何错误,但我可以回显 $rc 并看到它不为零。也许因为它不是 bash,我应该调用一个脚本。
      • 把它拉到一个单独的脚本中并且它工作了(无论如何这更好)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-04-14
      • 1970-01-01
      • 2011-05-14
      • 2012-02-07
      • 2016-10-07
      • 2021-08-07
      • 2016-06-29
      相关资源
      最近更新 更多