How to set environmental variable from Scala?
Solution 1
Example from doc for sys.process.Process
:
apply("java", new java.ioFile("/opt/app"), "CLASSPATH" -> "library.jar")
Edit for more helpful verbiage:
That is, you specify the env when you spawn a child process.
The environment of the current process is read-only; see System.getenv
, or compare the abstractions sys.props
and sys.env
.
The fact that a shell augments the environment it bestows on subshells with exported variables is a shell convention. See 3.7.4 in the bash reference, for example:
On invocation, the shell scans its own environment and creates a parameter for each name found, automatically marking it for export to child processes. Executed commands inherit the environment. The export and ‘declare -x’ commands allow parameters and functions to be added to and deleted from the environment. If the value of a parameter in the environment is modified, the new value becomes part of the environment, replacing the old. The environment inherited by any executed command consists of the shell's initial environment, whose values may be modified in the shell, less any pairs removed by the unset and ‘export -n’ commands, plus any additions via the export and ‘declare -x’ commands.
This is the first time my answer was longer than the Daniel Sobral answer it duplicates.
Solution 2
'export' isn't an executable, it's a shell built-in command. If you're trying to set the path in the parent shell, well, you can't. You can set it for a new shell that you execute. This is really more of a unix FAQ.
Related videos on Youtube
Jacob Jedryszek
I'm Growth Hacker at Facebook. I help to grow Facebook Marketplace. I used to work for Microsoft. I helped to build Azure.
Updated on September 14, 2022Comments
-
Jacob Jedryszek about 1 year
I need to set environmental variable (PATH) from Scala.
I tried this:
val cmd = Seq("export", "PATH='bla'") cmd.lines
but I got error:
java.io.IOException: Cannot run program "export": error=2, No such file or directory at java.lang.ProcessBuilder.start(ProcessBuilder.java:1041) at scala.sys.process.ProcessBuilderImpl$Simple.run(ProcessBuilderImpl.scala:68) at scala.sys.process.ProcessBuilderImpl$AbstractBuilder.lines(ProcessBuilderImpl.scala:140) at scala.sys.process.ProcessBuilderImpl$AbstractBuilder.lines(ProcessBuilderImpl.scala:106) at .<init>(<console>:12) at .<clinit>(<console>) at .<init>(<console>:11) at .<clinit>(<console>) at $print(<console>) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at scala.tools.nsc.interpreter.IMain$ReadEvalPrint.call(IMain.scala:704) at scala.tools.nsc.interpreter.IMain$Request.loadAndRun(IMain.scala:914) at scala.tools.nsc.interpreter.IMain.loadAndRunReq$1(IMain.scala:546) at scala.tools.nsc.interpreter.IMain.interpret(IMain.scala:577) at scala.tools.nsc.interpreter.IMain.interpret(IMain.scala:543) at scala.tools.nsc.interpreter.ILoop.reallyInterpret$1(ILoop.scala:694) at scala.tools.nsc.interpreter.ILoop.interpretStartingWith(ILoop.scala:745) at scala.tools.nsc.interpreter.ILoop.command(ILoop.scala:651) at scala.tools.nsc.interpreter.ILoop.processLine$1(ILoop.scala:542) at scala.tools.nsc.interpreter.ILoop.loop(ILoop.scala:550) at scala.tools.nsc.interpreter.ILoop.process(ILoop.scala:822) at scala.tools.nsc.interpreter.ILoop.main(ILoop.scala:851) at xsbt.ConsoleInterface.run(ConsoleInterface.scala:57) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at sbt.compiler.AnalyzingCompiler.call(AnalyzingCompiler.scala:73) at sbt.compiler.AnalyzingCompiler.console(AnalyzingCompiler.scala:64) at sbt.Console.console0$1(Console.scala:23) at sbt.Console$$anonfun$apply$2$$anonfun$apply$1.apply$mcV$sp(Console.scala:24) at sbt.TrapExit$.executeMain$1(TrapExit.scala:33) at sbt.TrapExit$$anon$1.run(TrapExit.scala:42) Caused by: java.io.IOException: error=2, No such file or directory at java.lang.UNIXProcess.forkAndExec(Native Method) at java.lang.UNIXProcess.<init>(UNIXProcess.java:135) at java.lang.ProcessImpl.start(ProcessImpl.java:130) at java.lang.ProcessBuilder.start(ProcessBuilder.java:1022) ... 35 more
Is there some other way to do that?
-
som-snytt about 10 yearsDuplicate of stackoverflow.com/q/9443190/1296806, which has an answer as terse as mine below.
-