2016-11-15 1 views
0

Le morceau de code est le suivant:ne peut pas accéder à la variable d'environnement Rust

// 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"); 

je reçois une erreur disant qu'il est incapable de trouver la variable d'environnement DISCORD_TOKEN.

Mon environnement ne montre la variable:

myawesomename$env | grep DISCORD 
DISCORD_TOKEN=you'llneverknow 

Si j'imprimer toutes les clés et valeurs Rust sait:

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

Il ne montre pas la variable d'environnement. Sur une note similaire, lorsque je fais env | grep CARGO, aucune des variables CARGO n'existe, mais elles sont imprimées dans le code Rust.

Il y a quelque chose que je ne comprends fondamentalement pas sur les variables d'environnement de profil/système que Rust examine (qui, je suppose, sont les variables dans l'environnement dans lequel le processus est lancé).

MISE À JOUR: Je ne sais pas ce que je change, mais cela fonctionne maintenant. Je m'excuse d'avoir empiété sur le temps de tout le monde. Merci de m'avoir aidé à me pencher là-dessus.

+1

Juste pour être sûr: 'you'llneverknow' est juste un remplacement pour cette question? Y a-t-il des caractères non-ASCII dans le jeton bot réel? –

+1

@LukasKalbertodt Etes-vous en train de dire qu'il y a des caractères non-ASCII dans vous? –

+1

@BillWoodger Non, c'est bon. Mais s'il s'agit d'un remplacement, le jeton réel peut contenir des caractères non-ASCII. –

Répondre

0

Résolu cette question parce que j'ai eu la réponse. Mais c'est parce que je n'ai pas examiné tous les facteurs avant de poser la question.

Cela a fonctionné quand j'ai couru cargo run, mais n'a pas fonctionné quand j'ai couru sudo cargo run. Je l'exécutais en sudo parce que j'essayais de lire la mémoire d'un autre processus. Le profil sudo possède son propre jeu de variables d'environnement, et il réinitialise l'environnement avant de passer à sudo.

Pour résoudre ce problème, j'ai couru sudo visudo et inséré cette ligne

Defaults env_keep += "DISCORD_TOKEN'

À partir de là, ça a marché.

This link m'a donné la réponse.