2013-10-22 29 views
5

Scala'da (veya Java'da) aşağıdakileri yapmak için kolay yol var mı? Komut satırı komutlarını bir Scala işleminden çalıştırmak istiyorum, örneğin:Birden çok kabuk komutunu joker karakterlerle çalıştırma

dinamik olarak oluşturulmuş bir kabuk komut dosyası olarak. javac *.java, ürününün test dizininde gerçekleşmesi gerekir. Her zamanki basit

import scala.sys.process._ 
... 
"cd test && javac *.java".! 

veya

"cd test && javac *.java".!! 
Scala && ve joker * misinterpretes çünkü

, çalışmaz. Neden bir fikrim yok.

cevap

11

Ne isterseniz, dizeyi komut satırı argümanı olarak bash olarak girmelisiniz. (Yani, Process(Seq("bash","-c","cd test && javac *.java")).!) Bunun nedeni, cd gibi durumu değiştirecek komutları girdiğiniz sanal bir kabuk olmamasıdır. Açıkça bir tane oluşturmanız gerekir.

process araçları, zincirleri bir araya getirmenize izin verir, ancak aramaların yan etkileri, dosya sisteminde veya somes ortamında değil, dosya sisteminde daha iyi yansıtılmıştır. Tanıtım metninin sonunda ProcessBuilder scaladoc contains an example.

+1

teşekkür etmek

import scala.sys.process._ "cd test".#&&("javac *.java").! 

Eşdeğer iyi çalışması gerekir. Bu arada ilgili sorular buldum [burada] (http://stackoverflow.com/questions/11790240/how-to-run-unix-shell-commands-with-wildcards-using-java), [burada] (http://stackoverflow.com/questions/2111983/java-runtime-getruntime-exec-wildcards) ve [burada] (http://stackoverflow.com/questions/11576767/setting-current-working-directory-when-executing -bir-kabuk-süreci) benzer noktaları yapar. Scala belgelerinin bu konuda daha iyi olabileceğini düşünüyorum. –

1

Bu anlamda bir çok yapar,

"cd test" #&& "javac *.java" ! 
İlgili konular