[systemd-devel] Accpetance of Environment Variables in Attributes

Lennart Poettering lennart at poettering.net
Fri Jun 26 13:27:25 UTC 2020


On Do, 25.06.20 20:25, Ede Wolf (listac at nebelschwaden.de) wrote:

> Does work, so %i works, $SOMETHING not. Different naming, different way of
> invocation, I am aware of that, but in general it still the usage of
> variables. And the likes of %H, %m or %v are some form of environment,
> aren't they?

Sure, you could claim this was a very specific form of templating. But
it's a very different kind of language, as these specifiers are
defined by systemd itself and are not affected by the contents of the
unit file itself. I.e. you cannot go and say within a unit file that
%m shall now resolve to "foo", and that %v shall now be
"xyz". Instead, these expansions are defined by the unit file language
itself, not by the unit file stanzas you place them in. That
difference is quite major: the value of each specifier expansion is
already well-defined and fixed at the moment we begin parsing the unit
file (and its drop-ins) and their meaning does not change based on
anything you could put in the file.

Scripting languages that know env vars or generic templating languages
are quite different there: you come up with variables, you assign them
at the top and then you can resolve them further down. This implies a
top-down, iterative order of execution. And we don't want that. Use m4
for that or shell. It's what they do, what they are good in.

It's the distinction between declarative languages and iterative
languages. We provide shortcuts to some concepts, but that's really
it, otherwise we are declarative and never iterative.

> > If you want a shell, use a shell.
>
> Given the dominance of systemd, this is only in parts realistic. This is not
> meant to critisize systemd itself, just this rather bold statement. As shown
> above, variables (specifiers, whatever you call them) are not shell
> specific.

They are not shell specific. You could also use m4 if you want a
templating language, there's no shame in that. But systemd is
certainly not in the business of inventing yet another shell or
generic templating language.

Lennart

--
Lennart Poettering, Berlin


More information about the systemd-devel mailing list