我们使用此命令运行所有测试摩卡:mocha ./src/test/**/*.js --recursive
注意双重**
。它在任何现代 bash 上都能正常工作,但 CI 系统除外,因为它是带有 的 RedHat GNU bash, version 3.2.25(1)-release (x86_64-redhat-linux-gnu)
。
我读过v3 不支持双 globstar。
- 我尝试过了启用它通过执行
shopt -s globstar
- 但没能说出
shopt: globstar: invalid shell option name
。
- 但没能说出
- 我要求客户的 DevOps 更新 Bash
- 但他说“它没有显示有新版本的 bash 可用”。
- 这其他答案没有帮助。
问题:如何在**
Linux Bash v3.* 上执行命令?有什么解决方法吗?
答案1
如果它不支持 globstar,那么它就不支持它。
但是,大多数情况下,您可以调整find
、xargs
和/或类似工具。您的情况非常简单,所有内容都位于一个目录下,因此:
find src/test -name "*.js" -exec mocha --recursive {} +
find src/test -name "*.js" -print | xargs -d '\n' mocha --recursive
(寻找将文件名放在 的位置{}
,然后参数将它们附加到末尾。因此在这两种情况下,重复的参数都必须放在所有 --options 之后的末尾,但这对大多数程序来说应该不是问题。)
或者,如果运行mocha
每个文件一次没问题,那么:
find src/test -name "*.js" -exec mocha {} --recursive \;
比较-exec … \;
(一次一个文件)和较早的文件-exec … +
(尽可能多的文件)。
笔记:在上述所有例子中,都"*.js"
必须引用,因为您要find
处理它,而不是 shell。