【发布时间】:2014-06-19 03:25:36
【问题描述】:
我正在尝试在 scala 中运行类似这样的 bash 命令:
cat "example file.txt" | grep abc
Scala 对流程管道有一种特殊的语法,所以这是我的第一种方法:
val filename = "example file.txt"
(Process(Seq("cat", filename)) #| Process(Seq("grep", "abc"))).run()
据我了解,这会执行第一个进程,将输出读回 scala 并将其提供给第二个进程。问题是,出于性能原因,我想在不离开终端的情况下执行这两个进程。该文件很大,我不需要整个输出,这就是我首先使用 grep 的原因。所以,我的第二种方法是这个:
val filename = "example file.txt"
(Process(Seq("bash", "-c", "cat " + filename + " | grep abc"))).run()
这里的问题是,如果文件名有空格,它就会中断。我可以尝试转义空格,但我宁愿让 scala 为我做这件事(我还需要转义许多其他字符)。
还有其他方法可以运行此命令吗?
【问题讨论】: