- <para>The command line accepts
- <literal>%</literal> specifiers as
- described in
- <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
- Note that the first argument of the
- command line (i.e. the program to
- execute) may not include
- specifiers.</para>
-
- <para>Basic environment variable
- substitution is supported. Use
- <literal>${FOO}</literal> as part of a
- word, or as a word of its own, on the
- command line, in which case it will be
- replaced by the value of the
- environment variable including all
- whitespace it contains, resulting in a
- single argument. Use
- <literal>$FOO</literal> as a separate
- word on the command line, in which
- case it will be replaced by the value
- of the environment variable split at
- whitespace, resulting in zero or more
- arguments. To pass a literal dollar
- sign, use <literal>$$</literal>.
- Variables whose value is not known at
- expansion time are treated as empty
- strings. Note that the first argument
- (i.e. the program to execute) may not
- be a variable.</para>
-
- <para>Variables to be used in this
- fashion may be defined through
- <varname>Environment=</varname> and
- <varname>EnvironmentFile=</varname>.
- In addition, variables listed in the
- section "Environment variables in
- spawned processes" in
- <citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
- which are considered "static
- configuration", may be used (this includes
- e.g. <varname>$USER</varname>, but not
- <varname>$TERM</varname>).</para>
-
- <para>Optionally, if the absolute file
- name is prefixed with
- <literal>@</literal>, the second token
- will be passed as
- <literal>argv[0]</literal> to the
- executed process, followed by the
- further arguments specified. If the
- absolute filename is prefixed with
- <literal>-</literal>, an exit code of
- the command normally considered a
- failure (i.e. non-zero exit status or
- abnormal exit due to signal) is ignored
- and considered success. If both
- <literal>-</literal> and
- <literal>@</literal> are used, they
- can appear in either order.</para>
-
- <para>Note that this setting does not
- directly support shell command
- lines. If shell command lines are to
- be used, they need to be passed
- explicitly to a shell implementation
- of some kind. Example:</para>
- <programlisting>ExecStart=/bin/sh -c 'dmesg | tac'</programlisting>
- <para>Example:</para>
- <programlisting>ExecStart=/bin/echo one ; /bin/echo "two two"</programlisting>
- <para>This will execute
- <command>/bin/echo</command> two
- times, each time with one argument:
- <literal>one</literal> and
- <literal>two two</literal>,
- respectively. Because two commands are
- specified,
- <varname>Type=oneshot</varname> must
- be used.</para>
-
- <para>Example:</para>
- <programlisting>ExecStart=/bin/echo / >/dev/null & \; \
-/bin/ls</programlisting>
- <para>This will execute
- <command>/bin/echo</command> with five
- arguments: <literal>/</literal>,
- <literal>>/dev/null</literal>,
- <literal>&</literal>,
- <literal>;</literal>, and
- <literal>/bin/ls</literal>.</para>
-
- <para>Example:</para>
- <programlisting>Environment="ONE=one" 'TWO=two two'
-ExecStart=/bin/echo $ONE $TWO ${TWO}</programlisting>
- <para>This will execute
- <command>/bin/echo</command> with four
- arguments: <literal>one</literal>,
- <literal>two</literal>,
- <literal>two</literal>, and
- <literal>two two</literal>.</para>