使用通配符运行git命令在bash中工作,但不能通过Process工作

时间:2017-06-08 10:00:44

标签: git scala process wildcard

我想使用git check-ignore运行sys.process.Process。这适用于shell(bash):

$ cd /home/me/Documents/Foo
$ git check-ignore *
target

通过/home/me/Documents/Foo/target忽略了目录/home/me/Documents/Foo/.gitignore

当我通过sys.process

运行时,这同样不起作用
import scala.sys.process._
val workingDir = new java.io.File("/home/me/Documents/Foo")
Process(Seq("git", "check-ignore", "*"), workingDir).!

它给出返回码1,意味着没有文件匹配。如果我指定特定名称,则可以:

Process(Seq("git", "check-ignore", "target"), workingDir).!

这会打印target并返回代码零。

那么为什么通配符*不能在这里工作,以及如何使其工作(假设我想列出所有被忽略的文件而且我不知道这些文件会是什么)?

2 个答案:

答案 0 :(得分:1)

似乎*是由bash扩展的通配符,而不是git check-ignored的直接支持。相反,方法是列出工作目录的子项,并将它们作为参数逐个传递给git。

答案 1 :(得分:1)

此问题与How to run unix / shell commands with wildcards using Java?相同,您也可以在 Scala 中实现,也许就像:

Process(Seq("bash", "-c", "git check-ignore *"), workingDir).!