2016-01-23 70 views
1

我有一個多模塊sbt項目,我想在我的項目的根文件夾中運行一個命令;因此我需要做cd ../..Scala:更改文件夾裏面sbt

我試圖

import sys.process._ 
"cd ../..".! 

,但我得到以下幾點:

java.io.IOException: Cannot run program "cd": error=2, No such file or directory 
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048) 
    at scala.sys.process.ProcessBuilderImpl$Simple.run(ProcessBuilderImpl.scala:69) 
    at scala.sys.process.ProcessBuilderImpl$AbstractBuilder.run(ProcessBuilderImpl.scala:98) 
    at scala.sys.process.ProcessBuilderImpl$AbstractBuilder.$bang(ProcessBuilderImpl.scala:112) 

回答

3

cd實際上不是一個程序。它是一個內部的shell,它告訴shell系統調用chdir。 Java甚至沒有使整個jvm可以更改其cwd(當前工作目錄)的功能(請參閱Changing the current working directory in Java?) - 對於Java文件訪問,有user.dir屬性,但這只是Java函數查看的變量。

一個選擇是執行sh -c "...",改變目錄叉形過程,就像這樣:

import sys.process._ 
val cmd = "whatever you wanted to run" 
s"sh -c 'cd ../..; $cmd'".! 

但更好的仍然是使用http://www.scala-lang.org/files/archive/api/current/index.html#scala.sys.process.Process $的工廠接受一項commandcwd

scala.sys.process.Process("your command here", new java.io.File("/some/dir")) 

要使用相對目錄,你可能需要從user.dir和「../ ..」和/或d創建CWD類似於How to define a relative path in java

相關問題