我有这个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很陌生......)
任何提示都表示赞赏。
不仅-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
答案 0 :(得分:1)
bash的-f
选项与-f
的{{1}}选项相同,即
set
禁用文件名生成(通配)。
禁用通配符后,通配符不会扩展。
那么,为什么要将shell设置为-f
?删除bash -f
。