2011-12-04 20 views
9

Son zamanlarda Scala'da sys.process paketini keşfettim ve gücünden dolayı eğlendim.scala.sys.process kullanarak bash dizelerini yürütme

Ama bunu bash boruları ve backticks ile birleştirmeye çalıştığımda, sıkışıp kaldım. Açıkçası

Bu işe yaramazsa:

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

yanlış yapıyorum:

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

Ben istenen davranışı elde etmek bash yürütülebilir kullanmaya çalıştı?

Düzenleme:

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 
+0

Bilgilendirici örneği (. Bu Rex Kerr çözümü çalışmıyor neden), ama tüm bunlar seni için bash gerekmez gerçekleştirmek umut: 'Seq ("tarih") !!' –

+0

@ ToddOwen - elbette, sadece örnek amaçlıydı. – Rogach

cevap

21

Yanlış aslında birden şeyleri yapıyorlar. Bas'ın -c seçeneğini kullanmalısınız ve her bir parametrede kendi String'inde basmak için bir Seq [String] kullanmalısınız, ya da scala kütüphanesi String'i her boşluk karakterine böler.

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 
" 
+1

'Seq' sürümü hakkında iyi bir nokta. Bunun yerine onu kullandım, çünkü her zaman yaptığım ve tek dizili versiyonu kontrol etmedim! –

+0

Aşağıda, bir komut dosyasını ve izlenecek hataların bulunduğu başka bir örnek gösterilmektedir. IE: test.sh echo $ 1 scala> Sıra ("/ somePath/test.sh", "HI")! Buraya kadar kredi: http://stackoverflow.com/questions/9039167/scala-system-process-and-whitespace – Nick