Выполнение строк bash с использованием scala.sys.process - PullRequest
9 голосов
/ 04 декабря 2011

Я недавно обнаружил пакет sys.process в Scala, и его позабавила его мощность.

Но когда я пытаюсь объединить его с трубами bash и backticks, я застреваю.

Thisочевидно, не работает:

scala> "echo `date`" !!
res0: String = "
"`date`
"

Я пытался использовать исполняемый файл bash для получения желаемого поведения:

scala> "bash -e echo `date`" !!
/bin/echo: /bin/echo: cannot execute binary file
java.lang.RuntimeException: Nonzero exit value: 126

Что я делаю не так?

Править:

scala> "bash -ic 'echo `date`'" !!
`date`': unexpected EOF while looking for matching `''
`date`': syntax error: unexpected end of file
 java.lang.RuntimeException: Nonzero exit value: 1

1 Ответ

22 голосов
/ 04 декабря 2011

Вы делаете несколько вещей неправильно на самом деле. Вы должны использовать опцию -c bash, и вы должны использовать Seq [String] с каждым параметром для bash в своей собственной строке, иначе библиотека scala просто разделит строку на каждый символ пробела. (Вот почему решение Rex Kerr не работает.)

scala> import sys.process.stringSeqToProcess
import sys.process.stringSeqToProcess

scala> Seq("bash", "-c", "echo `date`")!!
res20: String = 
"Sun Dec 4 16:40:04 CET 2011
"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...