我在远程服务器上有一个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
答案 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" } }
是有效的格式。