2015-03-05 2 views
9

У меня есть Systemd блок с пробелами в качестве аргументаКак использовать пробелы в аргументах командной строки systemd?

ExecStart=command --argument="text text" 

Кажется, что Systemd не признает двойные или одинарные кавычки, и это разбивает аргумент на два аргумента. Любая идея, как я могу это предотвратить? Я использую systemd v218 в CoreOS.

+0

Побег с обратной косой чертой? – Drux

+0

ссылка на документ: https://www.freedesktop.org/software/systemd/man/systemd.service.html#Command%20lines –

ответ

9

Это на самом деле удивительно трудно сделать, к сожалению. Я украл эту информацию у this answer. Единственный способ сделать это, чтобы положить свои аргументы в файле окружения, а затем использовать их в качестве переменных в качестве таковых (например, в /etc/.progconfig):

ARG1=text 
ARG2=text 

Затем импортировать файл среды перед запуском команды:

EnvironmentFile=/etc/.progconf 
ExecStart = command $ARG1 $ARG2 
+3

Спасибо, теперь я использую 'Environment = 'ARGUMENT = text text'' и ' ExecStart = команда --argument = $ ARGUMENT' и это работает! – Wolfgang

-2

Попробуйте спасаясь пространство, например, так:

ExecStart=command --argument="text\ text" 

(Кавычки могут или не могут быть необходимы.)

5

systemd только, кажется, распознает кавычки, которые полностью переносят аргументы; т.е.

ExecStart=command "--argument=text text"

работает, но

ExecStart=command --argument="text text"

нет. Я просто столкнулся с этой проблемой и написал об этом #624.

0

Как предложил Нико, вы можете создать EvironmentFile, в котором вы можете указать аргумент с пробелами.

SPACEYARG="i love spaces" 

В вашем единичном файле, однако, вам нужно обернуть этот аргумент в фигурных скобках для того, чтобы пространства должны быть переданы правильно.

EnvironmentFile=/etc/.progconf 
ExecStart = command ${SPACEYARG} 
0

Я думаю, что последние версии systemd начали принимать кавычки в середине аргументов, ближе к тому, что принимает bash. Тем не менее, ответ @ Tgr по-прежнему верен, и стоит остановиться. Здесь указывается весь аргумент, включая имя флага. Если вы сделаете это:

ExecStart=command "--argument=text text" 

Тогда Systemd поймет --argument=text text как единый позиционный аргумент. Вам не нужно беспокоиться о том, чтобы больше раскалываться на этом пространстве. Вы можете видеть такое же поведение в bash:

$ echo "--silly-flag=spaces  are preserved here" 
--silly-flag=spaces  are preserved here 
Смежные вопросы