2012-02-25 29 views
13

Tôi muốn chạy quá trình của tôi từ scala, với một số biến môi trường được sửa đổi. Ví dụ:Sửa đổi biến môi trường cho một quá trình với scala.sys.process?

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

và $ asdf được đặt thành giá trị nào đó. Có cách nào để làm điều này từ scala?

EDIT:

Gần nhất tôi có với nó cho đến nay:

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() 

Nhưng điều này là xấu xí.

+0

BTW, Bạn có thể làm điều đó giống như bạn làm trong Java: 'nhập khẩu java.util._' ' exec() Runtime.getRuntime ("echo $ PATH") ' –

+0

@ om-nôm-nom. Bạn có thể bỏ qua parens. Trong thực tế, hãy xem 'sys.runtime'. –

Trả lời

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

Xem Process.

+1

Lần đầu tiên, câu trả lời của tôi dài hơn câu trả lời Sobral nó trùng lặp. Trớ trêu thay, câu trả lời này chính xác hơn là câu trả lời cho câu hỏi trùng lặp có lẽ đang cố hỏi. http://stackoverflow.com/a/18411947/1296806 –

+0

@ som-snytt Đây là một câu trả lời khá nghèo nàn của tôi. Xấu hổ với tôi! :) –

+0

Tôi đã thử điều này và nó không hoạt động, nó cố gắng giải thích "echo $ asdf" là một tệp thực thi - cung cấp cho 'bash: echo $ asdf: Không có tệp hoặc thư mục nào'. – elias

Các vấn đề liên quan