Как сказал Муру, Вы можете изменить его, как показано ниже.
[Unit]
Description=b service
After=a.service
[Service]
Type=simple
#restart on failure and tries 5 times. If fail in all, then reboot the system
ExecStartPre=/usr/bin/python /home/pi/.clar/c.py
ExecStart=/usr/bin/python /home/pi/.clar/b.py
Restart=on-failure
RestartSec=15
StartLimitBurst=5
StartLimitInterval=2min
StartLimitAction=reboot
[Install]
WantedBy=a.service
Затем вам нужно выполнить sudo systemctl disable b.service
иsudo systemctl enable b.service
Я бы сделал это в 2 шага:(РЕДАКТИРОВАТЬ :артефакты — это массив объектов)
inner=$(jq -n --arg name oer \
--arg version "$ot" \
'$ARGS.named'
)
final=$(jq -n --arg configId "$configid" \
--arg objectname "tempfile" \
--arg test "2021" \
--argjson artifacts "[$inner]" \
'$ARGS.named'
)
echo "$final"
{
"configId": "c8f",
"objectname": "tempfile",
"artifacts": [
{
"name": "oer",
"version": "1.01"
}
], "test": "2021"
}
Добавьте -c
, если вы хотите, чтобы окончательный вывод состоял из одной строки.
Вы не получаете вывод, так как сохраняете вывод в переменной, поэтому нет ничего, что можно было бы перенаправить в файл. Вы можете сделать это:
variable=$(command)
или это:
command > file
Но вы не можете сделать variable=$(command) > file
, потому что нечего перенаправлять. Таким образом, несмотря на то, что описанное выше будет выполнено и создаст и/или перезапишет file
, файл всегда будет пустым, поскольку вы уже сохранили вывод команды в переменной.
Таким образом, если вы оба хотите получить вывод в переменной и сохранить его в файл, вам понадобится что-то вроде этого:
JSON_STRING=$(jq -n \
--arg configId "$configid" \
--arg objectname "tempfile" \
--arg artifacts "[{ "name" : "oer", "version" : "$ot" }]" \
--arg test "2021" \
'$ARGS.named')
printf '%s\n' "$JSON_STRING" > output.json
Кажется, вы хотите, чтобы artifacts
рассматривался как массив JSON. В этом случае используйте --argjson
вместо --arg
и исправьте кавычки:
jq -n \
--arg configId "$configid" \
--arg objectname "tempfile" \
--argjson artifacts "[{ \"name\" : \"oer\", \"version\" : \"$ot\" }]" \
--arg test "2021" \
'$ARGS.named'
Это должно привести к:
{
"configId": "",
"objectname": "tempfile",
"artifacts": [
{
"name": "oer",
"version": "1.01"
}
],
"test": "2021"
}
Самый безопасный способ создать JSON в командной строке — использовать инструмент, который создает его для вас, как это делает jq
. Однако, поскольку у вас есть вложенная структура, вы можете захотеть создать эту подструктуру -в отдельном вызове jq
, как показано glenn jackman .
Еще один способ сделать то, что они показывают, но за один раз:
jq -n \
--arg configId "$configid" \
--arg objectname tempfile \
--argjson artifacts "$(
jq -n \
--arg name oer \
--arg version "$ot" \
'$ARGS.named'
)" \
--arg test 2021 \
'$ARGS.named'
Мы используем --argjson
вместо --arg
для включения документа JSON из внутреннего jq
, так как это документ JSON, а не строка, требующая кодирования.
Вы также можете использовать jo
, что может немного сократить набор текста,
jo configId="$configid" \
objectname=tempfile \
artifacts="$( jo name=oer version="$ot" )" \
test=2021
Описание утилиты jo
находится здесь:https://jpmens.net/2016/03/05/a-shell-command-to-create-json-jo/