nspawn: allow --setenv=FOO as equivalent to --setenv=FOO=$FOO

systemd-socket-activate has supported such a mode since
5e65c93a43. '--setenv=FOO=$FOO' is a fairly
common use in scripts, and it's nicer to do this automatically without worrying
about quoting and whatnot.

https://github.com/systemd/mkosi/pull/765 added the same to 'mkosi --environment='.
This commit is contained in:
Zbigniew Jędrzejewski-Szmek 2021-08-10 17:11:56 +02:00
parent a14af47e64
commit 0d2a017986
2 changed files with 11 additions and 15 deletions

View file

@ -527,14 +527,14 @@
</varlistentry>
<varlistentry>
<term><option>-E <replaceable>NAME</replaceable>=<replaceable>VALUE</replaceable></option></term>
<term><option>--setenv=<replaceable>NAME</replaceable>=<replaceable>VALUE</replaceable></option></term>
<term><option>-E <replaceable>NAME</replaceable>[=<replaceable>VALUE</replaceable>]</option></term>
<term><option>--setenv=<replaceable>NAME</replaceable>[=<replaceable>VALUE</replaceable>]</option></term>
<listitem><para>Specifies an environment variable assignment
to pass to the init process in the container, in the format
<literal>NAME=VALUE</literal>. This may be used to override
the default variables or to set additional variables. This
parameter may be used more than once.</para></listitem>
<listitem><para>Specifies an environment variable to pass to the init process in the container. This
may be used to override the default variables or to set additional variables. It may be used more
than once to set multiple variables. When <literal>=</literal> and <replaceable>VALUE</replaceable>
are omitted, the value of the variable with the same name in the program environment will be used.
</para></listitem>
</varlistentry>
<varlistentry>

View file

@ -338,7 +338,7 @@ static int help(void) {
" -a --as-pid2 Maintain a stub init as PID1, invoke binary as PID2\n"
" -b --boot Boot up full system (i.e. invoke init)\n"
" --chdir=PATH Set working directory in the container\n"
" -E --setenv=NAME=VALUE Pass an environment variable to PID 1\n"
" -E --setenv=NAME[=VALUE] Pass an environment variable to PID 1\n"
" -u --user=USER Run the command under specified user or UID\n"
" --kill-signal=SIGNAL Select signal to use for shutting down PID 1\n"
" --notify-ready=BOOLEAN Receive notifications from the child init process\n\n"
@ -1121,17 +1121,13 @@ static int parse_argv(int argc, char *argv[]) {
arg_settings_mask |= SETTING_CUSTOM_MOUNTS;
break;
case 'E': {
if (!env_assignment_is_valid(optarg))
return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
"Environment variable assignment '%s' is not valid.", optarg);
r = strv_env_replace_strdup(&arg_setenv, optarg);
case 'E':
r = strv_env_replace_strdup_passthrough(&arg_setenv, optarg);
if (r < 0)
return r;
return log_error_errno(r, "Cannot assign environment variable %s: %m", optarg);
arg_settings_mask |= SETTING_ENVIRONMENT;
break;
}
case 'q':
arg_quiet = true;