Метод env_clear
Метод env_clear очищает все переменные окружения,
которые дочерний процесс унаследовал бы от текущего процесса.
Он не принимает параметров и возвращает изменяемую ссылку
на объект Command, что позволяет использовать его
в цепочке вызовов.
По умолчанию при запуске команды через Command
дочерний процесс наследует окружение родителя. Метод
env_clear полностью удаляет это окружение, после
чего можно добавить только нужные переменные с помощью
методов env или envs.
Синтаксис
command.env_clear()
Пример
Давайте запустим команду env с очищенным окружением.
Вывод покажет, что переменных окружения нет:
use std::process::Command;
fn main()
{
let res = Command::new("env")
.env_clear()
.output()
.expect("failed to execute command");
let out = String::from_utf8_lossy(&res.stdout);
println!("{}", out);
}
Результат выполнения кода:
""
Пример
Давайте очистим окружение и добавим одну переменную
MY_VAR со значением "12345":
use std::process::Command;
fn main()
{
let res = Command::new("env")
.env_clear()
.env("MY_VAR", "12345")
.output()
.expect("failed to execute command");
let out = String::from_utf8_lossy(&res.stdout);
println!("{}", out);
}
Результат выполнения кода:
"MY_VAR=12345"
Пример
Давайте убедимся, что после env_clear
унаследованные переменные недоступны. Проверим наличие
переменной PATH в дочернем процессе:
use std::process::Command;
fn main()
{
let res = Command::new("printenv")
.arg("PATH")
.env_clear()
.status()
.expect("failed to execute command");
println!("{:?}", res.success());
}
Результат выполнения кода:
false
Смотрите также
-
метод
env,
который добавляет одну переменную окружения -
метод
envs,
который добавляет несколько переменных окружения -
метод
env_remove,
который удаляет одну переменную окружения -
метод
new,
который создаёт новую команду для запуска