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

为什么执行Bash脚本导出变量后,Express API读取环境变量为undefined

问题原因

你直接执行./run.sh时,脚本会运行在独立的子Shell进程中,通过export声明的环境变量仅在该子Shell的生命周期内生效。脚本执行完成后子Shell随即销毁,你后续在父Shell中启动的nodemon进程无法继承到子Shell导出的变量,因此读取结果为undefined。

解决方案

下面是三种常用的可行方案,按需选择即可:

  • 方案1:使用source命令执行脚本,让脚本逻辑直接在当前Shell进程中运行,导出的变量会保留在当前Shell环境中
    执行命令如下:
    source run.sh
    # 或者使用简写的点操作符
    . run.sh
    # 之后正常启动服务即可
    nodemon index.js
    
  • 方案2:修改run.sh直接添加服务启动命令,让Node进程和环境变量处在同一个Shell生命周期内
    修改后的run.sh内容如下:
    #!/usr/bin/env bash
    export ROOT_FOLDER="~/projects/Publishing_Platform"
    export PORT=5000
    # 追加启动命令
    nodemon index.js
    
    之后直接执行./run.sh即可完成变量注入+服务启动的整套操作。
  • 方案3:无需借助Shell脚本,直接在启动命令中一次性注入环境变量
    执行命令如下:
    env ROOT_FOLDER="~/projects/Publishing_Platform" PORT=5000 nodemon index.js
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 15:18:03