【发布时间】:2020-03-19 16:22:31
【问题描述】:
我正在尝试编写一个使用 Scala 运行 Linux 命令的程序。
我已经编写了一段代码来运行md5sum 命令的功能。
代码sn-p
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
我不知道为什么。有什么办法让它工作吗?
【问题讨论】:
-
通过
>的管道是由shell(如bash)提供的。如果你想使用它,你不能直接执行md5sum,你必须让一个shell来做。 -
但是为什么要调用外部进程呢?您可以在 Scala 或 Java 本身中轻松执行 MD5 操作。 stackoverflow.com/q/415953/14955
-
如果“外部 linux 命令”包括管道,则通过 stackoverflow.com/a/3776277/14955 中的 shell 进行
-
如果你被要求创建一个框架来执行任意命令,你不能开始考虑提供命令的替代方案。你甚至不会知道
> outputfile是该命令的一部分。如果在您的任务范围内捕获给定命令的输出并将其写入您选择的文件,您可以这样做。关闭> outputfile部分,然后输出将被写入标准输出,您可以将其接受为 Scala 字符串。 stackoverflow.com/q/16714127/14955