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

为何在Bash中无法打印通过dotenv加载的环境变量?

问题描述

能通过Node.js里的console.log打印SEPOLIA_RPC_URL变量,但在Bash中使用printenv和echo $SEPOLIA_RPC_URL命令找不到该变量。

相关文件内容

.env 文件

SEPOLIA_RPC_URL=https://eth-sepolia.g.alchemy.com/v2/SYu8cyWG0EOfcfZVehXUoPMXW91om6Hd

test.js 文件

require("dotenv").config();
function main() {
    console.log(process.env.SEPOLIA_RPC_URL);
}
main();

执行输出

blue@DESKTOP-A6GBG6O:~/solidity/hardhat-sss$ node test.js
https://eth-sepolia.g.alchemy.com/v2/SYu8cyWG0EOfcfZVehXUoPMXW91om6Hd
blue@DESKTOP-A6GBG6O:~/solidity/hardhat-sss$ echo $SEPOLIA_RPC_URL

blue@DESKTOP-A6GBG6O:~/solidity/hardhat-sss$
原因分析
  • dotenv包的作用是读取.env文件里的变量,注入到Node.js进程的process.env中,但这个变量只存在于Node.js进程的上下文里,不会自动同步到当前Bash环境。
  • Bash环境的环境变量需要显式加载到当前shell会话中,.env文件本身不会被Bash自动识别加载。
解决方法

方法1:临时加载到当前Bash会话

执行以下命令,把.env中的变量导入当前shell:

source .env

之后再执行echo $SEPOLIA_RPC_URL就能看到变量值,不过这个方式只在当前shell会话有效,关闭终端后失效。

方法2:永久加载到Bash环境

如果需要每次打开终端都自动加载该变量,可以把加载命令添加到Bash配置文件中:

  1. 打开~/.bashrc或~/.bash_profile文件(根据系统选择):
nano ~/.bashrc
  1. 在文件末尾添加一行(替换为实际的.env文件路径):
source /path/to/your/.env
  1. 保存退出后,执行以下命令使配置生效:
source ~/.bashrc

方法3:用cli工具临时传递(可选)

如果只是需要在执行某个命令时临时让Bash获取到变量,可以安装dotenv-cli:

npm install -g dotenv-cli

然后执行命令时加载变量:

dotenv run -- echo $SEPOLIA_RPC_URL

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 19:12:07