2016-08-23 3 views
1

Я пишу Баш скрипт, который образуют JSon файл:Строка форматирования с Bash

#!/bin/bash 

json_string=$(<product.info.json) 
echo "$json_string" 

vers=%major_version%.%patch_version% 
date=`date +%%Y-%%m-%%d:%%H:%%M:%%S` 

echo VERSION: $vers 
echo DATE: $date 

result_string=$json_string 
result_string=${result_string/_DATE_/$date}; 
result_string=${result_string/_VERSION_/$vers}; 


echo "$result_string" > "User_Part/product.info.json" 

json_string=$(<User_Part/product.info.json) 
echo "$json_string 

это консоль из:

[14:09:26][Step 4/4] { 
[14:09:26][Step 4/4] "release":{ 
[14:09:26][Step 4/4]  "version":null 
[14:09:26][Step 4/4] }, 
[14:09:26][Step 4/4] "product":{ 
[14:09:26][Step 4/4]  "group":"CMS", 
[14:09:26][Step 4/4]  "name":"CMS_prod", 
[14:09:26][Step 4/4]  "version":"_VERSION_" 
[14:09:26][Step 4/4] }, 
[14:09:26][Step 4/4] "application":{ 
[14:09:26][Step 4/4]   "name":"OAPI", 
[14:09:26][Step 4/4]   "appl_id":"6150", 
[14:09:26][Step 4/4]   "version":"_VERSION_", 
[14:09:26][Step 4/4]   "date":"_DATE_", 
[14:09:26][Step 4/4]   "detail":null, 
[14:09:26][Step 4/4]   "vcs":{ 
[14:09:26][Step 4/4]    "hash":null, 
[14:09:26][Step 4/4]    "branch":null 
[14:09:26][Step 4/4]   }, 
[14:09:26][Step 4/4]   "build":{ 
[14:09:26][Step 4/4]    "number":null, 
[14:09:26][Step 4/4]    "url":null 
[14:09:26][Step 4/4]   } 
[14:09:26][Step 4/4]  } 
[14:09:26][Step 4/4] } 
[14:09:26][Step 4/4] VERSION: 003.09 
[14:09:26][Step 4/4] DATE: 2016-08-23:14:09:26 
[14:09:26][Step 4/4] { 
[14:09:26][Step 4/4] "release":{ 
[14:09:26][Step 4/4]  "version":null 
[14:09:26][Step 4/4] }, 
[14:09:26][Step 4/4] "product":{ 
[14:09:26][Step 4/4]  "group":"CMS", 
[14:09:26][Step 4/4]  "name":"CMS_prod", 
[14:09:26][Step 4/4]  "version":"003.09" 
[14:09:26][Step 4/4] }, 
[14:09:26][Step 4/4] "application":{ 
[14:09:26][Step 4/4]   "name":"OAPI", 
[14:09:26][Step 4/4]   "appl_id":"6150", 
[14:09:26][Step 4/4]   "version":"_VERSION_", 
[14:09:26][Step 4/4]   "date":"2016-08-23:14:09:26", 
[14:09:26][Step 4/4]   "detail":null, 
[14:09:26][Step 4/4]   "vcs":{ 
[14:09:26][Step 4/4]    "hash":null, 
[14:09:26][Step 4/4]    "branch":null 
[14:09:26][Step 4/4]   }, 
[14:09:26][Step 4/4]   "build":{ 
[14:09:26][Step 4/4]    "number":null, 
[14:09:26][Step 4/4]    "url":null 
[14:09:26][Step 4/4]   } 
[14:09:26][Step 4/4]  } 
[14:09:26][Step 4/4] } 

ДАТА был установлен, но версия нет, я не могу понять почему. Пожалуйста, помогите мне с этой двусмысленностью.

Возможно, есть более красивый способ сделать это, сценарий выполняется на сервере агента сборки в TeamCity.

+0

Я вижу '[14:09:26] [Шаг 4/4] ВЕРСИЯ: 003.09'. Итак, что это значит, что VERSION не была установлена? Кроме того, знаете ли вы ['jq'] (https://stedolan.github.io/jq/)? Это инструмент для разбора JSON в сценариях оболочки. Это может быть более полезным для вас, чем этот сценарий, который вы написали. – fedorqui

+0

Я не могу использовать jq, потому что я не могу установить его на сервере. Я имею в виду «версия»: «_ VERSION_» во второй строке. Ближе к настоящему времени. –

+0

ОК, я вижу. Попробуйте упростить свой пример, а также предоставить [mcve] содержимое 'product.info.json' – fedorqui

ответ

1

это выглядит, как вы пытаетесь выполнить замену _VERSION_ дважды, и кажется, что первая замена прошла успешно, но по умолчанию расширение Баш парам вы используете только выполнить замену один раз, попробуйте

result_string=${result_string//_VERSION_/$vers}; 

это даст возможность подставить флаг g - в regex говорить.

+0

Спасибо. Я понял проблему. Это было '//'. –

+0

рад, что вы его исправили, странно, что для разработки моего решения мне пришлось реплицировать ваш вопрос и просто догадаться, и проверить, что '//' может заставить его вести себя более «жадным» по сравнению с другими расширениями пара. руководство bash не помогает * Если шаблон начинается с /, все совпадения рисунка \t заменен \t со строкой. \t Обычно только первый матч \t заменен. * –

Смежные вопросы