【发布时间】:2019-03-05 10:04:49
【问题描述】:
好的,所以我想创建一个原生应用程序来读取一些环境变量,并根据一些业务逻辑,将它们的值更改为其他值。我决定用 Kotlin 来做。
我设法通过创建函数来了解如何更改系统环境变量:
fun call(arg: String) = platform.posix.system(command)
fun setEnvironmentVariable(variable: String, value: String) {
println("Changing value of $variable to $value")
call("SETX $variable $value")
}
但它只会改变价值。我想将它存储在 Kotlin 变量中并对其进行一些操作。
发出语句 call("SET $variable") 将值打印到命令提示符,但我不知道如何从 Kotlin 中捕获它。我想是否有一种方法可以将命令提示符的输出提取到一个字符串中,这样会更容易,即使 Windows 以 myvariable=myvalue 的形式输出它,而不仅仅是值。
提前致谢
【问题讨论】:
-
产生一个子进程来读取环境变量的值是使用大锤来破解坚果。见stackoverflow.com/questions/44320495/…
-
@DodgyCodeException System.getenv 是 Kotlin JVM,不是原生的
-
我看不到该页面如何包含对这里问题的任何答案。那里的答案只建议利用 System.getenv() 函数(我不能,因为我使用的是 Kotlin Native,而不是 JVM),或者使用第三方库进行配置,“使用从多个来源收集的属性 - 构建在资源、系统属性、属性文件、环境变量、命令行参数等”(这本身就是一个大锤)。我可能遗漏了一些东西,所以如果是这种情况并且链接页面实际上包含对我的问题的修复,那么请告诉我。
-
@KevinGalligan 你是对的,对不起。
-
您可以使用
"echo %$variable%"代替SET命令。这样你就不会得到变量=值模式,而只是值本身。您还必须以某种方式将标准输出重定向到 Kotlin 进程。但可能你最好使用与 C 的互操作,然后你可以使用 C 的getenv()调用。
标签: kotlin environment-variables kotlin-native