错误:md5sum:统计信息'>':没有这样的文件或目录

时间:2019-11-24 01:18:08

标签: linux scala

我正在尝试编写一个使用Scala运行Linux命令的程序。

我已经编写了一段代码来运行md5sum命令的功能。

代码段

object Test extends App {
  import sys.process._

  case class md5sum_builder private(i: Seq[String]) {
    println(i)
    protected def this() = this(Seq(""))
    def optionCheck() = new md5sum_builder(i :+ "-c")
    def files(file: String) = new md5sum_builder(i :+ file)
    def hashFile(hashfile: String) = new md5sum_builder(i :+ hashfile)
    def assignment(operator: String) = new md5sum_builder(i :+ operator)
    def build() = println(("md5sum" + i.mkString(" ")).!!)
  }

  object md5sum_builder {
    def apply() = new md5sum_builder
  }

  md5sum_builder().files("text.txt").files("text1.txt").assignment(">").hashFile("hashes.md5").build()

}

当我尝试使用此程序运行命令md5sum text.txt text1.txt > hashes.md5时,它将引发错误:

Error: md5sum: stat '>': No such file or directory

我不知道为什么。有什么办法可以使它起作用?

1 个答案:

答案 0 :(得分:0)

您的界面似乎没有经过深思熟虑。请注意,files()hashFile()assignment()都做相同的事情。所以有人可以来做这样的事情...

md5sum_builder().assignment("text0.txt")
                .hashFile("text1.txt")
                .files(">")                // <--shell redirection won't work
                .assignment("hashes.md5")
                .build()

...并获得与您发布的示例相同(非功能性)的结果。

这是一个修正,可以纠正该错误并允许重定向输出。

case class md5sum_builder private(i :Seq[String], outfile :String = "/dev/null") {
  protected def this()          = this(Seq.empty[String])
  def optionCheck(file :String) = this.copy(i = i ++ Seq("-c", file))
  def file(file: String)        = this.copy(i = i :+ file)
  def hashFile(file: String)    = this.copy(outfile = file)
  def build() = println(("md5sum" +: i).#|(Seq("tee", outfile)).!!)
}

现在,这些方法几乎可以按任何顺序使用,仍然可以获得预期的结果。

md5sum_builder().file("text0.txt")
                .hashFile("hashes.md5")
                .file("text1.txt")
                .build()