为何在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配置文件中:
- 打开
~/.bashrc或~/.bash_profile文件(根据系统选择):
nano ~/.bashrc
- 在文件末尾添加一行(替换为实际的
.env文件路径):
source /path/to/your/.env
- 保存退出后,执行以下命令使配置生效:
source ~/.bashrc
方法3:用cli工具临时传递(可选)
如果只是需要在执行某个命令时临时让Bash获取到变量,可以安装dotenv-cli:
npm install -g dotenv-cli
然后执行命令时加载变量:
dotenv run -- echo $SEPOLIA_RPC_URL
内容的提问来源于stack exchange,提问作者rvhj
相关产品推荐
相关产品推荐

