Как я могу добавить файл в другой файл с подходящим форматом, используя сценарий оболочки - PullRequest
0 голосов
/ 01 апреля 2020

У меня есть json шаблон файла. json

{
    "PTF_INSTALL_DATE": " 2020-03-31 09:12:10",
    "PTF_CONTENT": [
      {
        "NAME": "api_batch_API",
        "CHECKED": "api_batch_NOT_SELECTED",
        "VERSION": "G02R00C13_c14"
      }
    ]
  }

И этот файл исторический. json, он создан скриптом bash, я вызываю скрипт в Jenkinsfile

  [
   {
        "PTF_INSTALL_DATE": " 2020-03-31 09:12:10",
        "PTF_CONTENT": [
          {
            "NAME": "api_batch_API",
            "CHECKED": "api_batch_NOT_SELECTED",
            "VERSION": "G02R00C13_c14"
          }
        ]
     }
   ]

Поэтому, когда я делаю сборку в jenkins, в последнюю историю файла добавляется элемент. json как показано ниже:

[
    {
           "PTF_INSTALL_DATE": " 2020-03-31 09:12:10",
           "PTF_CONTENT": [
             {
                "NAME": "api_batch_API",
                "CHECKED": "api_batch_NOT_SELECTED",
                "VERSION": "G02R00C13_c14"
              }
            ]
         }
]
{
        "PTF_INSTALL_DATE": " 2020-03-31 09:12:10",
        "PTF_CONTENT": [
          {
            "NAME": "api_batch_API",
            "CHECKED": "api_batch_NOT_SELECTED",
            "VERSION": "G02R00C13_c14"
          }
        ]
  }

И т. Д. Поэтому мой вопрос заключается в том, как мне отформатировать файл истории, как показано ниже:

 [
      {
           "PTF_INSTALL_DATE": " 2020-03-31 09:12:10",
           "PTF_CONTENT": [
                  {
                    "NAME": "api_batch_API",
                    "CHECKED": "api_batch_NOT_SELECTED",
                    "VERSION": "G02R00C13_c14"
                  }
        ]
     },

    {
            "PTF_INSTALL_DATE": " 2020-03-31 09:12:10",
            "PTF_CONTENT": [
              {
                "NAME": "api_batch_API",
                "CHECKED": "api_batch_NOT_SELECTED",
                "VERSION": "G02R00C13_c14"
              }
       ]
    }
]

Это мой скрипт-скрипт. sh

#!/bin/bash

a=$(cat template.json)

if [ -e $WORKSPACE/project/historique.json ];
then
  cat template.json >> historique.json
else
  cat <<-EOF > historique.json
   [
    $a
   ]
EOF
fi

PS: Шаблон файла. json изменение при каждой сборке в jenkins

Проблема в команде после "then". Любое предложение, пожалуйста ?? (И извините за мой Engli sh)

Ответы [ 2 ]

0 голосов
/ 02 апреля 2020

Это мой скрипт-скрипт. sh

Пожалуйста, используйте предопределенный инструмент для обработки JSON. Например, для xidel вам даже не нужен сценарий '. sh' вообще:

$ xidel -s template.json -e '
  if (file:exists("'$WORKSPACE/project-CRMGP/historique.json'")) then
    array{
      json-doc("'$WORKSPACE/project-CRMGP/historique.json'")(),
      $json
    }
  else
    array{$json}
'
[
  {
    "PTF_INSTALL_DATE": " 2020-03-31 09:12:10",
    "PTF_CONTENT": [
      {
        "NAME": "api_batch_API",
        "CHECKED": "api_batch_NOT_SELECTED",
        "VERSION": "G02R00C13_c14"
      }
    ]
  },
  {
    "PTF_INSTALL_DATE": " 2020-03-31 09:12:10",
    "PTF_CONTENT": [
      {
        "NAME": "api_batch_API",
        "CHECKED": "api_batch_NOT_SELECTED",
        "VERSION": "G02R00C13_c14"
      }
    ]
  }
]
0 голосов
/ 01 апреля 2020

После ответа oguz ismail и shawn файл скрипта выглядит так:

#!/bin/bash

a=$(cat template.json)

if [ -e $WORKSPACE/project-CRMGP/historique.json ];
then
  jq '. + [input]' historique.json template.json > historique1.json 
else
  cat <<-EOF > historique.json
   [
    $a
   ]
EOF
fi

mv historique1.json historique.json
...