我想从远程服务器上检查一个特定的行。到目前为止,我可以检查文件是否存在。但是我可以使用像jq这样的工具来索引特定的行吗?
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
fioutput>
Serial number is found externally
./test.sh: line 127: ${remote_serial | jq '.serialNumber'}: bad substitution如何在{}内传递变量?我可以比较这些本地和远程文件而不使用scp吗?
发布于 2019-02-18 13:52:52
没必要让事情变得复杂。只需从远程主机获取JSON并通过jq传递它,然后在本地执行相同的操作。那就比较一下。如果远程文件丢失,您将得到一个错误(我们可以丢弃该错误),并且序列号会比较不同(除非本地序列号也缺少)。
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调用中变量扩展的引用。
您所得到的实际错误来自以下事实:
"${remote_serial | jq '.serialNumber'}"不是有效的变量展开。你可能想用这样的方法
"$( printf '%s\n' "$remote_serial" | jq '.serialNumber' )"但这假设$remote_serial包含JSON文档的内容。
发布于 2019-02-18 13:49:08
看起来应该是
"$(echo ${remote_serial} | jq '.serialNumber')"而不是
"${remote_serial | jq '.serialNumber'}"https://unix.stackexchange.com/questions/501349
复制相似问题