2013-10-22 33 views
5

是否有一個簡單方式在Scala(或Java)中執行以下操作。我想從Scala進程運行命令行命令,例如:使用通配符運行多個shell命令

cd test && javac *.java 

作爲一個動態生成的shell腳本。 javac *.java應該 發生在目錄test。一貫的簡約

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

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

不起作用,因爲Scala misinterpretes的&&和通配符*。我沒有 想法爲什麼。

回答

11

對於你想要的,你應該輸入字符串作爲bash的命令行參數。 (也就是Process(Seq("bash","-c","cd test && javac *.java")).!)原因在於沒有虛擬外殼進入你將要改變狀態的命令,如cd。你必須明確地創建一個。

process工具將允許您將調用鏈接在一起,但調用的副作用最好反映在文件系統或某些中,而不是在shell環境中。介紹性文字末尾的ProcessBuilder scaladoc contains an example

+1

謝謝,這使得有很大的意義。同時,我發現相關的問題[這裏](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

這應該做工精細

import scala.sys.process._  

"cd test".#&&("javac *.java").! 

相當於

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