为什么执行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
相关产品推荐
相关产品推荐

