首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从远程服务器的文件中对一行进行jq?

问如何从远程服务器的文件中对一行进行jq?
EN

Unix & Linux用户
提问于 2019-02-18 13:45:21
回答 2查看 533关注 0票数 0

我想从远程服务器上检查一个特定的行。到目前为止,我可以检查文件是否存在。但是我可以使用像jq这样的工具来索引特定的行吗?

代码语言:javascript
复制
if ssh -q -i $pathToPem $sshUsernameIp [ -f ${remote_serial} ];

        then

            echo "Serial number is found externally"
            serialNumber=$(cat serialNumber.json | jq '.serialNumber')

            if ssh -q -i $pathToPem $sshUsernameIp [ "$serialNumber" == "${remote_serial | jq '.serialNumber'}" ];
                then
                    echo "Serial number is same"
                else
                    echo "Serial number is not same"
            fi
fi

output>

代码语言:javascript
复制
Serial number is found externally
./test.sh: line 127: ${remote_serial | jq '.serialNumber'}: bad substitution

如何在{}内传递变量?我可以比较这些本地和远程文件而不使用scp吗?

EN

回答 2

Unix & Linux用户

回答已采纳

发布于 2019-02-18 13:52:52

没必要让事情变得复杂。只需从远程主机获取JSON并通过jq传递它,然后在本地执行相同的操作。那就比较一下。如果远程文件丢失,您将得到一个错误(我们可以丢弃该错误),并且序列号会比较不同(除非本地序列号也缺少)。

代码语言:javascript
复制
r_serial=$( ssh -q -i "$pathToPem" "$sshUsernameIp" cat "$remote_serial" 2>/dev/null | jq -r '.serialNumber' )
l_serial=$( jq -r '.serialNumber' serialNumber.json )

if [ "$r_serial" = "$l_serial" ]; then
    echo 'same'
else
    echo 'different (or missing)'
fi

这是假设$remote_serial是远程机器上JSON文档的路径名。

还请注意对ssh调用中变量扩展的引用。

您所得到的实际错误来自以下事实:

代码语言:javascript
复制
"${remote_serial | jq '.serialNumber'}"

不是有效的变量展开。你可能想用这样的方法

代码语言:javascript
复制
"$( printf '%s\n' "$remote_serial" | jq '.serialNumber' )"

但这假设$remote_serial包含JSON文档的内容。

票数 1
EN

Unix & Linux用户

发布于 2019-02-18 13:49:08

看起来应该是

代码语言:javascript
复制
"$(echo ${remote_serial} | jq '.serialNumber')"

而不是

代码语言:javascript
复制
"${remote_serial | jq '.serialNumber'}"
票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/501349

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档