Skip to content

Add Command environment variable inheritance docs #109272

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Apr 14, 2023
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
76 changes: 61 additions & 15 deletions library/std/src/process.rs
Original file line number Diff line number Diff line change
Expand Up @@ -644,10 +644,19 @@ impl Command {
self
}

/// Inserts or updates an environment variable mapping.
/// Inserts or updates an explicit environment variable mapping.
///
/// Note that environment variable names are case-insensitive (but case-preserving) on Windows,
/// and case-sensitive on all other platforms.
/// This method allows you to add an environment variable mapping to the spawned process or
/// overwrite a previously set value. You can use [`Command::envs`] to set multiple environment
/// variables simultaneously.
///
/// Child processes will inherit environment variables from their parent process by default.
/// Environment variables explicitly set using [`Command::env`] take precedence over inherited
/// variables. You can disable environment variable inheritance entirely using
/// [`Command::env_clear`] or for a single key using [`Command::env_remove`].
///
/// Note that environment variable names are case-insensitive (but
/// case-preserving) on Windows and case-sensitive on all other platforms.
///
/// # Examples
///
Expand All @@ -671,7 +680,19 @@ impl Command {
self
}

/// Adds or updates multiple environment variable mappings.
/// Inserts or updates multiple explicit environment variable mappings.
///
/// This method allows you to add multiple environment variable mappings to the spawned process
/// or overwrite previously set values. You can use [`Command::env`] to set a single environment
/// variable.
///
/// Child processes will inherit environment variables from their parent process by default.
/// Environment variables explicitly set using [`Command::envs`] take precedence over inherited
/// variables. You can disable environment variable inheritance entirely using
/// [`Command::env_clear`] or for a single key using [`Command::env_remove`].
///
/// Note that environment variable names are case-insensitive (but case-preserving) on Windows
/// and case-sensitive on all other platforms.
///
/// # Examples
///
Expand Down Expand Up @@ -708,7 +729,18 @@ impl Command {
self
}

/// Removes an environment variable mapping.
/// Removes an explicitly set environment variable and prevents inheriting it from a parent
/// process.
///
/// This method will remove the explicit value of an environment variable set via
/// [`Command::env`] or [`Command::envs`]. In addition, it will prevent the spawned child
/// process from inheriting that environment variable from its parent process.
///
/// After calling [`Command::env_remove`], the value associated with its key from
/// [`Command::get_envs`] will be [`None`].
///
/// To clear all explicitly set environment variables and disable all environment variable
/// inheritance, you can use [`Command::env_clear`].
///
/// # Examples
///
Expand All @@ -728,7 +760,17 @@ impl Command {
self
}

/// Clears the entire environment map for the child process.
/// Clears all explicitly set environment variables and prevents inheriting any parent process
/// environment variables.
///
/// This method will remove all explicitly added environment variables set via [`Command::env`]
/// or [`Command::envs`]. In addition, it will prevent the spawned child process from inheriting
/// any environment variable from its parent process.
///
/// After calling [`Command::env_remove`], the iterator from [`Command::get_envs`] will be
/// empty.
///
/// You can use [`Command::env_remove`] to clear a single mapping.
///
/// # Examples
///
Expand Down Expand Up @@ -980,17 +1022,21 @@ impl Command {
CommandArgs { inner: self.inner.get_args() }
}

/// Returns an iterator of the environment variables that will be set when
/// the process is spawned.
/// Returns an iterator of the environment variables explicitly set for the child process.
///
/// Environment variables explicitly set using [`Command::env`], [`Command::envs`], and
/// [`Command::env_remove`] can be retrieved with this method.
///
/// Note that this output does not include environment variables inherited from the parent
/// process.
///
/// Each element is a tuple `(&OsStr, Option<&OsStr>)`, where the first
/// value is the key, and the second is the value, which is [`None`] if
/// the environment variable is to be explicitly removed.
/// Each element is a tuple key/value pair `(&OsStr, Option<&OsStr>)`. A [`None`] value
/// indicates its key was explicitly removed via [`Command::env_remove`]. The associated key for
/// the [`None`] value will no longer inherit from its parent process.
///
/// This only includes environment variables explicitly set with
/// [`Command::env`], [`Command::envs`], and [`Command::env_remove`]. It
/// does not include environment variables that will be inherited by the
/// child process.
/// An empty iterator can indicate that no explicit mappings were added or that
/// [`Command::env_clear`] was called. After calling [`Command::env_clear`], the child process
/// will not inherit any environment variables from its parent process.
///
/// # Examples
///
Expand Down