Как прочитать файл .json с SSH удаленного сервера с помощью сценария оболочки - PullRequest
0 голосов
/ 16 ноября 2018

У меня есть файл json на удаленном сервере, и я хочу прочитать данные с него с помощью сценария оболочки, я пробовал приведенный ниже код, но он не работал;

#!/usr/bin/env bash
#!/usr/bin/sh

echo "hey"


ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -i 
/home/.ssh/cloud_private_key user@adresse << EOF

script
cd /data/Doc1/
databasename=`jq '.ref_Version' re.json`
echo "hello $databasename"
EOF

Файл json содержит

 {
 "fileMetadata" : {
 "ref_Version" : "125",}
 }

Я получаю:

hey
[user@adresse ~]$ [user@adresse data]$ [user@adresse Doc1]$ 
 hello 
[user@adresse ~]$ [user@adresse data]$ [user@adresse Doc1]$ hey22

Ответы [ 2 ]

0 голосов
/ 19 ноября 2018

Рассмотрите возможность запуска jq локально вместо того, чтобы на другой стороне SSH:

#!/usr/bin/env bash
set -o pipefail  # consider it a failure if any part of a pipeline fails.

getJson() {
  local address filename_q
  address=$1
  printf -v filename_q '%q' "$2"
  ssh \
    -o UserKnownHostsFile=/dev/null \
    -o StrictHostKeyChecking=no \
    -i /home/.ssh/cloud_private_key \
    "$address" "cat $filename_q"
}

if databaseName=$(getJson user@address /data/Doc1/re.json \
                  | jq -r '.fileMetadata.ref_Version'); then
  echo "Hello $databaseName"
else
  echo "Unable to retrieve or parse JSON" >&2
fi

Аналогично, , как отметил l'L'l , вашему JSON нужны некоторые исправления, чтобы быть правильно сформированными. { "fileMetadata": { "ref_Version": "125" } } является действительной переформулировкой.

0 голосов
/ 16 ноября 2018

Прежде всего, ваш JSON недействителен, в конце у вас есть дополнительная запятая ,, замените ее на:

{
    "fileMetadata": {
        "ref_Version": "125"
    }
}

С помощью команды jq вы никогда не указываетеПодключ для возврата значения должен быть:

jq '.fileMetadata.ref_Version' re.json

Выход:

"125"
...