2012-02-25 81 views
13

我想从scala运行我的进程,修改了几个环境变量。例如:使用scala.sys.process修改进程的环境变量?

Seq("bash","echo $asdf") ! 

和$ asdf设置为某个值。有没有办法从Scala做到这一点?

编辑:

我得到了它迄今为止最接近:

val pb = new java.lang.ProcessBuilder("bash","echo $asdf") 
pb.environment.put("asdf","value") } 
val p = pb.start() 
io.Source.fromInputStream(p.getInputStream).getLines.toList.foreach(println) 
p.waitFor() 

但是,这是丑陋的。

+0

顺便说一句,你可以做到这一点,就像你做的Java: '进口java.util._' '调用Runtime.getRuntime()EXEC( “回声$ PATH”)' – 2012-02-25 10:51:58

+0

@ OM-NOM-NOM。你可以省略parens。实际上,请参阅'sys.runtime'。 – 2013-08-24 05:02:43

回答

15
Process(Seq("bash", "-c", "echo $asdf"), None, "asdf" -> "Hello, world!").! 

请参阅Process

+1

有史以来第一次,我的答案比Sobral重复的答案长。具有讽刺意味的是,这个答案更准确地回答了重复问题可能试图提出的问题。 http://stackoverflow.com/a/18411947/1296806 – 2013-08-24 05:00:37

+0

@ som-snytt这是我的一个相当差的答案。对我感到羞耻! :) – 2013-08-24 06:08:51

+0

我试过这个,它不起作用,它试图将“echo $ asdf”解释为可执行文件 - 给出'bash:echo $ asdf:没有这样的文件或目录。 – elias 2013-09-19 19:37:41