From 0337b3d51c848edb3c0532f58416be3a87ae70b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Tue, 10 Aug 2021 17:25:47 +0200 Subject: [PATCH] run: allow --setenv=FOO --- man/systemd-run.xml | 12 ++++++++---- src/run/run.c | 7 ++++--- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/man/systemd-run.xml b/man/systemd-run.xml index fc8716ea79..99726dabfb 100644 --- a/man/systemd-run.xml +++ b/man/systemd-run.xml @@ -239,11 +239,15 @@ - - + + - Runs the service process with the specified environment variable set. - Also see Environment= in + Runs the service process with the specified environment variable set. This parameter + may be used more than once to set multiple variables. When = and + VALUE are omitted, the value of the variable with the same name in the + program environment will be used. + + Also see Environment= in systemd.exec5. diff --git a/src/run/run.c b/src/run/run.c index 993f1bc4f4..fb38571228 100644 --- a/src/run/run.c +++ b/src/run/run.c @@ -111,7 +111,7 @@ static int help(void) { " --nice=NICE Nice level\n" " --working-directory=PATH Set working directory\n" " -d --same-dir Inherit working directory from caller\n" - " -E --setenv=NAME=VALUE Set environment\n" + " -E --setenv=NAME[=VALUE] Set environment variable\n" " -t --pty Run service on pseudo TTY as STDIN/STDOUT/\n" " STDERR\n" " -P --pipe Pass STDIN/STDOUT/STDERR directly to service\n" @@ -322,8 +322,9 @@ static int parse_argv(int argc, char *argv[]) { break; case 'E': - if (strv_extend(&arg_environment, optarg) < 0) - return log_oom(); + r = strv_env_replace_strdup_passthrough(&arg_environment, optarg); + if (r < 0) + return log_error_errno(r, "Cannot assign environment variable %s: %m", optarg); break;