You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Scala中设置和获取环境变量并在Shell脚本中读取?

Scala环境变量操作:获取、设置及传递给Shell脚本

一、Scala中获取环境变量

Scala直接调用JVM的System.getenv()方法读取环境变量:

  • 获取单个环境变量:
    val homePath = System.getenv("HOME")
    println(s"用户主目录: $homePath")
    
  • 获取所有环境变量并转为Scala可遍历的Map:
    import scala.jdk.CollectionConverters._
    val allEnvVars = System.getenv().asScala
    allEnvVars.foreach { case (key, value) =>
      println(s"$key = $value")
    }
    

二、Scala中设置环境变量

注意:Scala运行在JVM上,无法直接修改操作系统的全局环境变量,只能在当前JVM进程内临时修改,或者通过启动子进程时传递自定义变量。

1. 临时修改当前JVM进程内的环境变量

这种修改仅对当前Scala程序生效,退出后失效,且依赖JVM内部实现(不推荐生产环境使用):

import java.lang.reflect.Field
import scala.jdk.CollectionConverters._

// 通过反射获取System类的私有env映射
val envField = classOf[System].getDeclaredField("env")
envField.setAccessible(true)
val envMap = envField.get(null).asInstanceOf[java.util.Map[String, String]]

// 添加或修改环境变量
envMap.put("MY_CUSTOM_VAR", "scala_env_value")

// 验证
println(System.getenv("MY_CUSTOM_VAR")) // 输出 scala_env_value

2. 启动Shell脚本时传递自定义环境变量

如果要让外部Shell脚本获取Scala中的变量,最可靠的方式是在启动脚本时传递自定义环境变量:

import scala.jdk.CollectionConverters._

// 基于当前系统环境变量,添加自定义变量
val baseEnv = System.getenv().asScala.toMap
val customEnv = baseEnv + ("SCALA_PASSED_VAR" -> "hello_from_scala")

// 构建进程启动器,传递自定义环境
val pb = new ProcessBuilder("./my_script.sh")
pb.environment().putAll(customEnv.asJava)

// 启动脚本并等待执行完成
val process = pb.start()
val exitCode = process.waitFor()
println(s"脚本执行完成,退出码: $exitCode")

三、Shell脚本中获取Scala传递的变量

方式1:直接读取传递的环境变量

假设上面的Scala程序启动了my_script.sh,脚本内可以直接通过变量名访问:

#!/bin/bash
echo "Scala传递的变量值: $SCALA_PASSED_VAR"

方式2:捕获Scala程序的输出作为Shell变量

如果Scala程序通过标准输出打印变量值,Shell可以捕获该输出:
Scala程序(VarOutput.scala):

object VarOutput extends App {
  val myVar = "scala_to_shell"
  println(myVar)
}

Shell脚本:

#!/bin/bash
# 运行Scala程序并捕获输出
captured_var=$(scala VarOutput.scala)
echo "从Scala捕获的变量: $captured_var"

内容的提问来源于stack exchange,提问作者sai m

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 04:35:25