about summary refs log tree commit diff
path: root/library/std/src/sys/unix/process/process_common.rs
diff options
context:
space:
mode:
authorRalf Jung <post@ralfj.de>2023-08-03 09:22:54 +0200
committerRalf Jung <post@ralfj.de>2023-08-24 08:08:46 +0200
commit396cbe66397ba77184e4ed896f4ba17f623c00f7 (patch)
treea4120467a7af3381780a0bfa3b9de82427dac4ed /library/std/src/sys/unix/process/process_common.rs
parentf2b139f23d574ca1d2c764b581a3b993e9af1570 (diff)
downloadrust-396cbe66397ba77184e4ed896f4ba17f623c00f7.tar.gz
rust-396cbe66397ba77184e4ed896f4ba17f623c00f7.zip
make unsetting env vars print as executable command
Diffstat (limited to 'library/std/src/sys/unix/process/process_common.rs')
-rw-r--r--library/std/src/sys/unix/process/process_common.rs18
1 files changed, 16 insertions, 2 deletions
diff --git a/library/std/src/sys/unix/process/process_common.rs b/library/std/src/sys/unix/process/process_common.rs
index 9362fc7f205..3a02a6c20d9 100644
--- a/library/std/src/sys/unix/process/process_common.rs
+++ b/library/std/src/sys/unix/process/process_common.rs
@@ -558,11 +558,25 @@ impl fmt::Debug for Command {
             if let Some(ref cwd) = self.cwd {
                 write!(f, "cd {cwd:?} && ")?;
             }
+            // Removed env vars need a separate command.
+            // We use a single `unset` command for all of them.
+            let mut any_removed = false;
+            for (key, value_opt) in self.get_envs() {
+                if value_opt.is_none() {
+                    if !any_removed {
+                        write!(f, "unset ")?;
+                        any_removed = true;
+                    }
+                    write!(f, "{} ", key.to_string_lossy())?;
+                }
+            }
+            if any_removed {
+                write!(f, "&& ")?;
+            }
+            // Altered env vars can just be added in front of the program.
             for (key, value_opt) in self.get_envs() {
                 if let Some(value) = value_opt {
                     write!(f, "{}={value:?} ", key.to_string_lossy())?;
-                } else {
-                    write!(f, "unset({}) ", key.to_string_lossy())?;
                 }
             }
             if self.program != self.args[0] {