从 Scala 调用时无法将复杂样式传递给 clang 格式

Can't pass complex -style to clang-format when invoking from Scala

在 Scala 中,我调用命令行 clang-format 如下:

val formatterParams = List("-i", "-sort-includes", s"-style=llvm", headerFile.getAbsolutePath)
Process("clang-format", formatterParams).!

这很好用。从命令行我可以调用它作为

clang-format -style='{BasedOnStyle: llvm, IndentWidth: 4}' library-api/src/main/resources/Cols.hpp

这也很好用。所以我写

val formatterParams = List("-i", "-sort-includes", "-style='{BasedOnStyle: llvm, IndentWidth: 4}'", headerFile.getAbsolutePath)
Process("clang-format", formatterParams).!

并...得到

Invalid value for -style, using LLVM style.

我也尝试将整个命令传递给 Process.apply,但没有用。

编辑:使用 Java ProcessBuilder 确实可以作为解决方法。我仍然想要 Scala Process.

的答案

尝试删除 -style 参数值周围的 single-quotes。

这些单引号是特殊的 Bash 语法,您需要在命令行上停止 Bash 解释同样是特殊 Bash 语法的大括号。 Bash 在调用 clang-format.

时从参数的最终值中删除单引号

但是 Process 不使用 Bash 到 运行 子进程,所以 single-quotes 被转发到 clang-format 本身,这可能不会理解他们。