From: Max Chernoff Date: Tue, 2 Jun 2026 04:49:04 +0000 (-0600) Subject: man: Document additional environment.d syntax X-Git-Tag: v261-rc3~24 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=fc24f0e8fb1b348ba2b1361d1045ec83c0c8b642;p=thirdparty%2Fsystemd.git man: Document additional environment.d syntax --- diff --git a/man/environment.d.xml b/man/environment.d.xml index 70dc40c56c9..0b00296d6e5 100644 --- a/man/environment.d.xml +++ b/man/environment.d.xml @@ -68,13 +68,33 @@ ${FOO:+ALTERNATE_VALUE} to expand to ALTERNATE_VALUE as long as ${FOO} would have expanded to a non-empty value. + You can escape a literal dollar sign $ by doubling it, as in + $$. + + A backslash character \ followed by a newline acts as a line + continuation (both characters are discarded); in all other cases, the backslash is consumed and + the following character is included literally in the value. This can be used to preserve + leading/trailing whitespace or include literal backslashes. + + You may optionally enclose the right hand side of assignments in pairs of either + 'single quotes' or "double + quotes"; these will be stripped from the value before saving it. Using + either quoting style does not affect variable expansion; however, single quotes disable + backslash escaping entirely, while double quoting removes backslashes that precede double quotes + ", dollar signs $, backslashes \, + backticks `, and newlines, and leaves all other backslashes in place. + + Leading and trailing whitespace characters are stripped from both the left and right hand + sides of the assignment. To preserve such spaces in the value, you can either enclose the entire + value in quotes, or escape the space characters with backslashes. You can also include literal + newlines in the value by enclosing it in quotes. + + Each KEY must be a valid variable name. Empty lines and lines + beginning with the comment characters # or ; are ignored. No other elements of shell syntax are supported. - Each KEY must be a valid variable name. Empty lines - and lines beginning with the comment character # are ignored. - - Example + Examples Setup environment to allow access to a program installed in <filename index="false">/opt/foo</filename> @@ -82,10 +102,39 @@ /etc/environment.d/60-foo.conf: - FOO_DEBUG=force-software-gl,log-verbose - PATH=/opt/foo/bin:$PATH - LD_LIBRARY_PATH=/opt/foo/lib${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH} - XDG_DATA_DIRS=/opt/foo/share:${XDG_DATA_DIRS:-/usr/local/share/:/usr/share/} +FOO_DEBUG=force-software-gl,log-verbose +PATH=/opt/foo/bin:$PATH +LD_LIBRARY_PATH=/opt/foo/lib${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH} +XDG_DATA_DIRS=/opt/foo/share:${XDG_DATA_DIRS:-/usr/local/share/:/usr/share/} + + + + + Escaping and variable expansion + + /etc/environment.d/70-bar.conf: + + +# A comment +test_var=(variable) +; Another comment +test_comment=value # This is a part of the variable, and not a comment! + +test_none= \ before\ +after "" '' \${test_var} +test_double=" \ before\ +after "" '' \${test_var}" +test_single=' \ before\ +after "" '' \${test_var}' + +# The above example produces the following environment variables, written using +# C-style string escapes: +# +# test_var="(variable)" +# test_comment="value # This is a part of the variable, and not a comment!" +# test_none=" beforeafter \"\" '' (variable)" +# test_double=" \\ beforeafter '' (variable)" +# test_single=" \\ before\\\nafter \"\" \\(variable)"