diff --git a/man/machinectl.xml b/man/machinectl.xml index ad47b6102e3..7ecb8885a25 100644 --- a/man/machinectl.xml +++ b/man/machinectl.xml @@ -712,14 +712,16 @@ - - + + - When used with the shell command, sets an environment - variable to pass to the executed shell. Takes an environment variable name and value, - separated by =. This switch may be used multiple times to set multiple - environment variables. Note that this switch is not supported for the - login command (see below). + When used with the shell command, sets an environment variable for + the executed shell. This option 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. + + Note that this option is not supported for the login command. + diff --git a/src/machine/machinectl.c b/src/machine/machinectl.c index b4c251078ba..3f4ad878972 100644 --- a/src/machine/machinectl.c +++ b/src/machine/machinectl.c @@ -2510,7 +2510,7 @@ static int help(int argc, char *argv[], void *userdata) { " --kill-who=WHO Who to send signal to\n" " -s --signal=SIGNAL Which signal to send\n" " --uid=USER Specify user ID to invoke shell as\n" - " -E --setenv=VAR=VALUE Add an environment variable for shell\n" + " -E --setenv=VAR[=VALUE] Add an environment variable for shell\n" " --read-only Create read-only bind mount\n" " --mkdir Create directory before bind mounting, if missing\n" " -n --lines=INTEGER Number of journal entries to show\n" @@ -2765,13 +2765,9 @@ static int parse_argv(int argc, char *argv[]) { break; case 'E': - if (!env_assignment_is_valid(optarg)) - return log_error_errno(SYNTHETIC_ERRNO(EINVAL), - "Environment assignment invalid: %s", optarg); - - r = strv_extend(&arg_setenv, optarg); + r = strv_env_replace_strdup_passthrough(&arg_setenv, optarg); if (r < 0) - return log_oom(); + return log_error_errno(r, "Cannot assign environment variable %s: %m", optarg); break; case ARG_MAX_ADDRESSES: