makefile中的Bash通配符不起作用

时间:2018-05-16 08:31:02

标签: bash makefile

我有这个makefile:

SHELL := /bin/bash -f

working : 
    if [ -d ffprob_runfail ]; then echo "gotcha" ;fi

error : 
    if [ -d ffprob_* ]; then echo "gotcha" ;fi

执行'使工作'在子目录&fffprob_runfail'的子文件夹中。存在回声:

  

if [-d ffprob_runfail];然后回声"陷阱" ;网络连接

     

疑难杂症

执行'犯错误'在同一文件夹中回声:

  

if [-d ffprob_ *];然后回声"陷阱" ;网络连接

我不确定这个'令人惊讶的'行为来自 - 使用make或bash语法进行错误编码。我尝试逃避*但没有奏效。可能是[] bash运算符语法的问题? (经过20年的缓解疼痛,我对bash很陌生......)

任何提示都表示赞赏。

POST EDIT:

不仅-f选项禁用了globbing(感谢@choroba),而且bash中的-d运算符也是一元的,并且不能安全地用于globbing,即引用Bash Shell Script: confirm the existance of one or more directories

所以这看起来是正确的方法(继续上一个makefile ...):

right : 
    for item in ffprob_* ; do if [ -d "$$item" ] ; \
    then echo "gotcha $$item";fi;done

1 个答案:

答案 0 :(得分:1)

bash的-f选项与-f的{​​{1}}选项相同,即

  

set禁用文件名生成(通配)。

禁用通配符后,通配符不会扩展。

那么,为什么要将shell设置为-f?删除bash -f