Não, isso não é possível em arquivos unitários do systemd, ele suporta apenas uma expansão mínima de variáveis e não tem como objetivo implementar a substituição de variáveis semelhantes a shell.
Se você precisar de algo parecido com o que descreve, a recomendação seria colocar sua inicialização em um shell script e usar esse script em ExecStart=
. Nesse caso, você terá todos os recursos de um shell disponíveis para definir o ambiente variáveis antes de executar o programa principal do serviço.
Se você usar um script de shell em ExecStart=
, certifique-se de usar exec
para iniciar o programa principal no final do script, para que o shell fique fora do caminho e o systemd esteja monitorando diretamente seu comando.
Se quiser evitar a necessidade de criar e manter um arquivo externo adicional, você poderá inserir o script de shell no arquivo de unidade, mas, nesse caso, lembre-se de chamar o shell explicitamente (com sh -c
ou equivalente para outro shell) e que você precisa escapar do $
(usando dois deles) para evitar que o systemd tente interpretá-lo. Então você precisa de algo como:
ExecStart=/bin/sh -c 'abc=$${abc:-"notABC?"}; exec mycmd "$abc"'