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

Scala应用通过shell启动Node服务时设置环境变量报错如何解决

问题原因

你当前使用的Scala Process字符串调用语法默认不会通过Shell解析命令,执行时会直接按空格拆分命令片段,把第一个片段TEST_ENV_VAR=fake-key识别为待执行的可执行文件,因此抛出找不到文件的报错。

解决方案

方案1:显式调用Shell执行(适合简单场景)

把完整命令封装到sh -c的参数中,交给Shell完成环境变量解析:

import java.nio.file.{Files, Path}
import scala.language.postfixOps
import scala.sys.process._

@main def app() =
    val path = Path.of(scala.sys.props.get("user.home").get + "/projects")
    s"sh -c 'TEST_ENV_VAR=fake-key node $path/node-server/server.js'" !!

注意:如果文件路径包含空格或特殊字符,需要提前对路径做转义处理,避免Shell解析出错。

方案2:使用ProcessBuilder传入环境变量(更安全,推荐)

直接通过Scala Process的官方API传入环境变量,不依赖Shell解析,也避免Shell注入风险:

import java.nio.file.{Files, Path}
import scala.language.postfixOps
import scala.sys.process.Process

@main def app() =
    val path = Path.of(scala.sys.props.get("user.home").get + "/projects")
    // 第一个参数:命令+参数序列,第二个参数:工作目录(None表示继承当前进程工作目录),后续参数:环境变量键值对
    Process(
      Seq("node", s"$path/node-server/server.js"),
      None,
      "TEST_ENV_VAR" -> "fake-key"
    ).!!

内容的提问来源于stack exchange,提问作者Harrison Sligting

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 03:57:03