2014-07-08 00:48:25 +04:00
<?xml version='1.0'?> <!-- * - nxml - * -->
2019-03-14 16:40:58 +03:00
< !DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
2015-06-18 20:47:44 +03:00
"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
2020-11-09 07:23:58 +03:00
<!-- SPDX - License - Identifier: LGPL - 2.1 - or - later -->
2014-07-08 00:48:25 +04:00
<refentry id= "systemd-escape"
2015-02-04 05:14:13 +03:00
xmlns:xi="http://www.w3.org/2001/XInclude">
<refentryinfo >
<title > systemd-escape</title>
<productname > systemd</productname>
</refentryinfo>
<refmeta >
<refentrytitle > systemd-escape</refentrytitle>
<manvolnum > 1</manvolnum>
</refmeta>
<refnamediv >
<refname > systemd-escape</refname>
2017-07-14 19:39:18 +03:00
<refpurpose > Escape strings for usage in systemd unit names</refpurpose>
2015-02-04 05:14:13 +03:00
</refnamediv>
<refsynopsisdiv >
<cmdsynopsis >
<command > systemd-escape</command>
<arg choice= "opt" rep= "repeat" > OPTIONS</arg>
<arg choice= "opt" rep= "repeat" > STRING</arg>
</cmdsynopsis>
</refsynopsisdiv>
<refsect1 >
<title > Description</title>
<para > <command > systemd-escape</command> may be used to escape
strings for inclusion in systemd unit names. The command may be
used to escape and to undo escaping of strings.</para>
<para > The command takes any number of strings on the command line,
2015-10-26 18:10:17 +03:00
and will process them individually, one after another. It will
2015-02-04 05:14:13 +03:00
output them separated by spaces to stdout.</para>
2014-08-03 09:11:12 +04:00
<para > By default, this command will escape the strings passed,
2015-02-04 05:14:13 +03:00
unless <option > --unescape</option> is passed which results in the
2014-08-03 09:11:37 +04:00
inverse operation being applied. If <option > --mangle</option> is given, a
special mode of escaping is applied instead, which assumes the
string is already escaped but will escape everything that
2015-02-04 05:14:13 +03:00
appears obviously non-escaped.</para>
2017-10-26 13:22:38 +03:00
<para > For details on the escaping and unescaping algorithms see the relevant section in
<citerefentry > <refentrytitle > systemd.unit</refentrytitle> <manvolnum > 5</manvolnum> </citerefentry> .</para>
2015-02-04 05:14:13 +03:00
</refsect1>
<refsect1 >
<title > Options</title>
<para > The following options are understood:</para>
<variablelist >
<varlistentry >
<term > <option > --suffix=</option> </term>
<listitem > <para > Appends the specified unit type suffix to the
escaped string. Takes one of the unit types supported by
2017-03-01 23:24:18 +03:00
systemd, such as <literal > service</literal> or
<literal > mount</literal> . May not be used in conjunction with
2015-02-04 05:14:13 +03:00
<option > --template=</option> , <option > --unescape</option> or
2023-08-22 19:52:36 +03:00
<option > --mangle</option> .</para>
<xi:include href= "version-info.xml" xpointer= "v216" /> </listitem>
2015-02-04 05:14:13 +03:00
</varlistentry>
<varlistentry >
<term > <option > --template=</option> </term>
<listitem > <para > Inserts the escaped strings in a unit name
template. Takes a unit name template such as
2016-10-30 17:43:01 +03:00
<filename > foobar@.service</filename> . With
<option > --unescape</option> , expects instantiated unit names
for this template and extracts and unescapes just the instance
part. May not be used in conjunction with
2016-10-31 01:49:15 +03:00
<option > --suffix=</option> ,
<option > --instance</option> or
2023-08-22 19:52:36 +03:00
<option > --mangle</option> .</para>
<xi:include href= "version-info.xml" xpointer= "v216" /> </listitem>
2015-02-04 05:14:13 +03:00
</varlistentry>
<varlistentry >
<term > <option > --path</option> </term>
<term > <option > -p</option> </term>
2023-09-16 21:22:29 +03:00
<listitem > <para > When escaping or unescaping a string, assume it refers to a file system path. This
simplifies the path (leading, trailing, and duplicate <literal > /</literal> characters are removed,
no-op path <literal > .</literal> components are removed, and for absolute paths, leading
<literal > ..</literal> components are removed). After the simplification, the path must not contain
<literal > ..</literal> .</para>
<para > This is particularly useful for generating strings suitable for unescaping with the
<literal > %f</literal> specifier in unit files, see
2017-10-26 13:22:38 +03:00
<citerefentry > <refentrytitle > systemd.unit</refentrytitle> <manvolnum > 5</manvolnum> </citerefentry> .
2023-08-22 19:52:36 +03:00
</para>
<xi:include href= "version-info.xml" xpointer= "v216" /> </listitem>
2015-02-04 05:14:13 +03:00
</varlistentry>
<varlistentry >
<term > <option > --unescape</option> </term>
2018-05-10 06:15:55 +03:00
<term > <option > -u</option> </term>
2015-02-04 05:14:13 +03:00
<listitem > <para > Instead of escaping the specified strings,
undo the escaping, reversing the operation. May not be used in
2016-10-30 17:43:01 +03:00
conjunction with <option > --suffix=</option> or
2023-09-18 18:03:38 +03:00
<option > --mangle</option> .</para>
<xi:include href= "version-info.xml" xpointer= "v216" /> </listitem>
2015-02-04 05:14:13 +03:00
</varlistentry>
<varlistentry >
<term > <option > --mangle</option> </term>
2018-05-10 06:15:55 +03:00
<term > <option > -m</option> </term>
2015-02-04 05:14:13 +03:00
<listitem > <para > Like <option > --escape</option> , but only
escape characters that are obviously not escaped yet, and
possibly automatically append an appropriate unit type suffix
to the string. May not be used in conjunction with
<option > --suffix=</option> , <option > --template=</option> or
2023-09-18 18:03:38 +03:00
<option > --unescape</option> .</para>
<xi:include href= "version-info.xml" xpointer= "v216" /> </listitem>
2015-02-04 05:14:13 +03:00
</varlistentry>
2016-10-31 01:49:15 +03:00
<varlistentry >
<term > <option > --instance</option> </term>
<listitem > <para > With <option > --unescape</option> , unescape
and print only the instance part of an instantiated unit name
template. Results in an error for an uninstantiated template
like <filename > ssh@.service</filename> or a non-template name
like <filename > ssh.service</filename> .
Must be used in conjunction with <option > --unescape</option>
and may not be used in conjunction with
2023-08-22 19:52:36 +03:00
<option > --template</option> .</para>
<xi:include href= "version-info.xml" xpointer= "v240" /> </listitem>
2016-10-31 01:49:15 +03:00
</varlistentry>
2015-02-04 05:14:13 +03:00
<xi:include href= "standard-options.xml" xpointer= "help" />
<xi:include href= "standard-options.xml" xpointer= "version" />
</variablelist>
</refsect1>
<refsect1 >
<title > Examples</title>
2016-10-30 03:44:07 +03:00
<para > To escape a single string:</para>
2015-02-04 05:14:13 +03:00
<programlisting > $ systemd-escape 'Hallöchen, Meister'
2014-07-08 00:48:25 +04:00
Hall\xc3\xb6chen\x2c\x20Meister</programlisting>
2015-02-04 05:14:13 +03:00
<para > To undo escaping on a single string:</para>
<programlisting > $ systemd-escape -u 'Hall\xc3\xb6chen\x2c\x20Meister'
2014-07-08 00:48:25 +04:00
Hallöchen, Meister</programlisting>
2015-02-04 05:14:13 +03:00
<para > To generate the mount unit for a path:</para>
<programlisting > $ systemd-escape -p --suffix=mount "/tmp//waldi/foobar/"
2014-07-08 00:48:25 +04:00
tmp-waldi-foobar.mount</programlisting>
2016-10-30 03:44:07 +03:00
<para > To generate instance names of three strings:</para>
2015-02-04 05:14:13 +03:00
<programlisting > $ systemd-escape --template=systemd-nspawn@.service 'My Container 1' 'containerb' 'container/III'
2014-07-08 00:48:25 +04:00
systemd-nspawn@My\x20Container\x201.service systemd-nspawn@containerb.service systemd-nspawn@container-III.service</programlisting>
2016-10-30 17:43:01 +03:00
<para > To extract the instance part of an instantiated unit:</para>
2016-10-31 01:49:15 +03:00
<programlisting > $ systemd-escape -u --instance 'systemd-nspawn@My\x20Container\x201.service'
My Container 1</programlisting>
<para > To extract the instance part of an instance of a particular template:</para>
2016-10-30 17:43:01 +03:00
<programlisting > $ systemd-escape -u --template=systemd-nspawn@.service 'systemd-nspawn@My\x20Container\x201.service'
My Container 1</programlisting>
2015-02-04 05:14:13 +03:00
</refsect1>
<refsect1 >
<title > Exit status</title>
<para > On success, 0 is returned, a non-zero failure code
otherwise.</para>
</refsect1>
<refsect1 >
<title > See Also</title>
<para >
<citerefentry > <refentrytitle > systemd</refentrytitle> <manvolnum > 1</manvolnum> </citerefentry> ,
2017-10-26 13:22:38 +03:00
<citerefentry > <refentrytitle > systemd.unit</refentrytitle> <manvolnum > 5</manvolnum> </citerefentry> ,
2015-02-04 05:14:13 +03:00
<citerefentry > <refentrytitle > systemctl</refentrytitle> <manvolnum > 1</manvolnum> </citerefentry>
</para>
</refsect1>
2014-07-08 00:48:25 +04:00
</refentry>