我试图运行一个可以释放可用内存的进程,但进程生成器无法解析awk部分......
scala> import scala.sys.process._
scala> "grep MemFree /proc/meminfo" #| "awk '{print $2}'" !
awk: cmd. line:1: '{print
awk: cmd. line:1: ^ invalid char ''' in expression
res16: Int = 1
与此结果相同......
scala> Seq("grep", "MemFree /proc/meminfo") #| Seq("awk", "'", "{print $2}", "'") !
awk: cmd. line:1: '
awk: cmd. line:1: ^ invalid char ''' in expression
逃避不起作用......
scala> Seq("grep", "MemFree /proc/meminfo") #| Seq("awk", "\"'{print $2}'\"") !
res21: Int = 0
我怎样才能获得awk' {print $ 2}'上班?有没有办法检查进程构建器尝试执行的内容?
答案 0 :(得分:2)
撇号仅用于bash以了解参数边界的位置。在Scala中,当您使用Seq
时,会给出这些边界并且撇号没有意义,它们会传递给awk
然后抱怨。
import scala.sys.process._
(Seq("grep", "MemFree", "/proc/meminfo") #| Seq("awk", "{print $2}")).!
另请注意,grep的参数必须分开。
顺便说一下,如果你想将值转换为Scala,可以使用!!
:
(Seq("grep","MemFree","/proc/meminfo") #| Seq("awk","{print $2}")).!!.trim.toInt
答案 1 :(得分:0)
在Bash或类似的shell中使用'
对来表示其中的空格是不是分隔符用于单独的参数。即'{print $2}'
表示awk
命令的第一个参数应为字符串{print $2}
。
所以你正在寻找Seq("awk", "{print $2}")
。