Skip to main content

command_stream/commands/
env.rs

1//! Virtual `env` command implementation
2
3use crate::commands::CommandContext;
4use crate::utils::CommandResult;
5use std::collections::HashMap;
6
7/// Execute the env command
8///
9/// Displays environment variables.
10pub async fn env(ctx: CommandContext) -> CommandResult {
11    let mut output = String::new();
12
13    let mut env_vars: HashMap<_, _> = std::env::vars().collect();
14    if let Some(overrides) = ctx.env {
15        env_vars.extend(overrides);
16    }
17    for (key, value) in env_vars {
18        output.push_str(&format!("{}={}\n", key, value));
19    }
20
21    CommandResult::success(output)
22}
23
24#[cfg(test)]
25mod tests {
26    use super::*;
27
28    #[tokio::test]
29    async fn test_env() {
30        let ctx = CommandContext::new(vec![]);
31        let result = env(ctx).await;
32
33        assert!(result.is_success());
34        // Should contain at least PATH or HOME
35        assert!(result.stdout.contains("PATH=") || result.stdout.contains("HOME="));
36    }
37}