无法访问 Rust 中的环境变量

问题描述 投票:0回答:2

该段代码如下:

// Log in to Discord using a bot token from the environment                  
let discord = Discord::from_bot_token(                                       
    &env::var("DISCORD_TOKEN").unwrap()                                      
).expect("login failed");

我收到错误消息,提示无法找到环境变量

DISCORD_TOKEN

我的环境确实显示了变量:

myawesomename$env | grep DISCORD
DISCORD_TOKEN=you'llneverknow

如果我打印 Rust 知道的所有键和值:

for (key, value) in env::vars() {                                            
    println!("{}: {}", key, value);                                      
}

它不显示环境变量。

类似地,当我执行

env | grep CARGO
时,任何 CARGO 变量都不存在,但它们会打印在 Rust 代码中。

我根本不理解 Rust 正在查看的配置文件/系统环境变量(我认为它们是启动进程的环境中的变量)。

更新:我不知道我改变了什么,但现在可以了。对于打扰大家的时间我深表歉意。不过还是谢谢你帮我调查这个问题。

rust environment-variables rust-cargo
2个回答
1
投票

取消删除这个问题,因为我得到了答案。但这是因为我在提出问题之前没有检查所有因素。

当我运行

cargo run
时它有效,但当我运行
sudo cargo run
时它不起作用。我在 sudo 中运行它是因为我试图读取另一个进程的内存。
sudo
配置文件有它自己的一组环境变量,它会在使用 sudo 之前重置环境。

为了解决这个问题,我运行了

sudo visudo
并插入了这一行

Defaults env_keep += "DISCORD_TOKEN'

从那里开始,它起作用了。

这个链接给了我答案。


0
投票

我知道那是很久以前的事了,但万一有人正在为此苦苦挣扎:

就我而言,这是因为我的 shell 是

Fish
并且我的变量是在
Bash
中定义的。

我推测 Rust

env::var()
会读取它找到的任何内容,无论在哪里。

所以在我的鱼中:

set -x MY_VAR "value"

或者在 Bash 中:

export MY_VAR="value"
© www.soinside.com 2019 - 2024. All rights reserved.