scala - 如何在 Linux 上从 Scala 代码运行导出命令来添加新的环境变量?

标签 scala playframework

我在一个简单的Web项目中使用play框架,我想从Web界面在application.conf文件中设置配置,例如,我想从Web界面更新application.conf中的应用程序 secret ,我知道不可能从 Controller 修改 application.conf 文件,所以我尝试从 Controller 创建一个新的环境变量并在 application.conf 文件中调用它,问题是我无法使用导出命令在 Scala 代码中创建新的环境变量,我尝试了这些,但没有好的结果:

第一个:

val test = "导出 MYVAR = 测试" val ex = 测试。!!

第二个:

val pb = new ProcessBuilder("sh","-c","export VAR="+ "PATH-TO-ADD"+ "&& exec").start()

第三个:

Process("导出", Seq("MY_VAR=ttt")).!!

最佳答案

由于环境变量的工作方式,这是不可能的。

环境变量属于特定进程,只有在该进程中运行的代码才能更改环境。子流程将使用父流程中的任何导出变量进行初始化,但子流程无法更改其父流程的环境变量。

您的 Scala 程序在子进程中运行,因此它只能影响其自身和任何子进程的环境。它无法更改生成它的 shell 的环境。

如果您详细说明为什么要这样做,则可能可以通过其他方式解决该问题。

关于scala - 如何在 Linux 上从 Scala 代码运行导出命令来添加新的环境变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52625834/

相关文章:

java - Play框架2.7.2迁移,BodyPrasers.parse NoClassDefFoundError

scala - 无法在 Play for Scala 中发送到浏览器 ByteArrayOutputStream

scala - play 2.3/reactivemongo 应用程序上的编译器错误

intellij-idea - 配置 IntelliJ 以便运行测试需要特定的配置文件?

java - "application.path"变量的用途和用法

java - 在 Heroku 上使用 Memcached 而不存储硬编码的配置细节

Scala 2.10 类型推断因 ADT 失败 - 从 2.9.3 回归

scala - Play 2.0/SBT : Exclude certain transitive dependencies from some/all modules in Build. 斯卡拉

java - 在 Java 中反序列化 Scala 反序列化的对象

scala - 编写功能代码,查找功能示例