2013-10-22 18 views
5

簡単なスカラ(またはJava)での操作方法はありますか? Scalaプロセスからコマンドラインコマンドを実行したいとします。たとえば、ワイルドカードを使用した複数のシェルコマンドの実行

cd test && javac *.java 

動的に生成されるシェルスクリプトです。ディレクトリtestjavac *.javaを にする必要があります。 Scalaは&&をmisinterpretesとワイルドカード*ので、いつものシンプルな

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

または

"cd test && javac *.java".!! 

は、動作しません。なぜ私は アイデアがありません。

答えて

11

文字列をコマンドライン引数としてbashに入力する必要があります。 (すなわち、Process(Seq("bash","-c","cd test && javac *.java")).!)理由は、あなたがcdのような状態を変更するコマンドを入力している仮想シェルがないということです。明示的に作成する必要があります。

processツールを使用すると、コールを連鎖させることができますが、コールの副作用がファイルシステムやシェル環境に反映されている方がよいでしょう。入門テキストの最後にProcessBuilderスカードックcontains an example

+1

おかげで、相当

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

罰金を動作するはずです。その間、私は関連する質問[ここ](http://stackoverflow.com/questions/11790240/how-to-run-unix-shell-commands-with-wildcards-using-java)、[ここ]( http://stackoverflow.com/questions/2111983/java-runtime-getruntime-exec-wildcards)と[ここ](http://stackoverflow.com/questions/11576767/setting-current-working-directory-when-executing -a-shell-process)を使用して同様の点を作成します。私はScalaのドキュメントがこの問題に関してより良くなると思う。 –

1

これは多くの意味を作る

"cd test" #&& "javac *.java" ! 
関連する問題