diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..e5c89e6 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,7 @@ +# changelog + +## [Unreleased] + +### Fixed + +- piping .env to stdin and running envset keys will now print the keys instead of writing them to .env diff --git a/README.md b/README.md index 7ff07c1..53f78ff 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@ brew install schpet/tap/envset cargo install envset ``` -otherwise, grab the [latest release](https://github.com/schpet/envset/releases). +otherwise, grab the [latest release](https://github.com/schpet/envset/releases/latest). ## usage diff --git a/src/lib.rs b/src/lib.rs index cd0787a..fd9315a 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -225,14 +225,18 @@ pub fn print_lines(lines: &[parser::Line], writer: &mut W, use_color: pub fn print_env_keys_to_writer(file_path: &str, writer: &mut W) { if let Ok(env_vars) = read_env_vars(file_path) { - for key in env_vars.keys() { - writeln!(writer, "{}", key).unwrap(); - } + print_keys_from_map(&env_vars, writer); } else { eprintln!("Error reading .env file"); } } +pub fn print_keys_from_map(env_vars: &HashMap, writer: &mut W) { + for key in env_vars.keys() { + writeln!(writer, "{}", key).unwrap(); + } +} + pub fn delete_env_vars( content: &str, keys: &[String], diff --git a/src/main.rs b/src/main.rs index 4337cad..0537a1a 100644 --- a/src/main.rs +++ b/src/main.rs @@ -7,8 +7,8 @@ use std::process; use envset::{ add_env_vars, parse_args, parse_stdin, print_env_file_contents, print_env_keys_to_writer, - print_env_vars, print_env_vars_as_json, print_parse_tree, read_env_file_contents, - read_env_vars, + print_env_vars, print_env_vars_as_json, print_keys_from_map, print_parse_tree, + read_env_file_contents, read_env_vars, }; fn print_diff(old_content: &str, new_content: &str, use_color: bool) { @@ -128,7 +128,12 @@ fn main() { return; // Exit after printing } Some(Commands::Keys) => { - print_env_keys_to_writer(&cli.file, &mut std::io::stdout()); + if !atty::is(Stream::Stdin) { + let env_vars = parse_stdin(); + print_keys_from_map(&env_vars, &mut std::io::stdout()); + } else { + print_env_keys_to_writer(&cli.file, &mut std::io::stdout()); + } } Some(Commands::Delete { keys }) => match read_env_file_contents(&cli.file) { Ok(old_content) => match envset::delete_env_vars(&old_content, keys) {