如何在 v4 之前的 bash 上使用 globstar

如何在 v4 之前的 bash 上使用 globstar

我们使用此命令运行所有测试摩卡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,那么它就不支持它。

但是,大多数情况下,您可以调整findxargs和/或类似工具。您的情况非常简单,所有内容都位于一个目录下,因此:

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。

相关内容