o systemd faz sua própria análise de linha de comando estilo shell ao estilo minimalista do conteúdo de ExecStart=
e outros parâmetros. Esta análise minimalista suporta a substituição básica de variáveis do ambiente, mas aparentemente não são coisas como ${PORT:+port is $PORT}
.
Você vai querer evitar que o systemd faça isso e deixe o shell chamado manipulá-lo.
Da documentação:
To pass a literal dollar sign, use "
$$
".
Então tente isto:
ExecStart=/usr/bin/bash -c "echo $${PORT:+port is $$PORT}"
Ou melhor ainda, tente isto:
ExecStart=/bin/sh -c "echo $${PORT:+port is $$PORT}"
porque o tipo de expansão de variáveis que você está fazendo aqui é padrão POSIX e não é um bash-ism. Ao usar /bin/sh
em vez de bash
, você removerá uma dependência desnecessária de bash
.