如何使用外壳程序脚本从远程服务器SSH读取.json文件

时间:2018-11-16 14:08:09

标签: json bash file jq

我在远程服务器上有一个json文件,我想使用shell脚本从中读取数据,我已经尝试了下面的代码,但是没有用;

#!/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 :(得分:1)

首先,您的JSON无效,最后还有一个逗号,,将其更改为:

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

使用jq命令,您永远不会指定返回值的子键,它应该是:

jq '.fileMetadata.ref_Version' re.json

输出:

"125"

答案 1 :(得分:0)

考虑在本地运行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

类似地,as noted by l'L'l,您的JSON需要一些修正才能形成正确的格式。 { "fileMetadata": { "ref_Version": "125" } }是有效的格式。