Gostaria de verificar uma linha específica de um servidor remoto. Até agora, posso verificar se o arquivo existe ou não. Mas posso indexar uma linha específica usando uma ferramenta como 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
fi
saída>
Serial number is found externally
./test.sh: line 127: ${remote_serial | jq '.serialNumber'}: bad substitution
Como posso passar a variável dentro de {} lá? Posso comparar esses arquivos locais e remotos sem scp ing?
Não há necessidade de complicar. Basta pegar o JSON do host remoto e passá-lo
jq
, depois faça o mesmo localmente. Então compare. Se o arquivo remoto estiver ausente, você receberá um erro (que podemos descartar) e os números de série serão comparados diferentes (a menos que o número de série local também esteja ausente).Isso pressupõe que
$remote_serial
seja o nome do caminho do documento JSON na máquina remota.Observe também a citação das expansões de variáveis na chamada para
ssh
.O erro real que você obtém vem do fato de que
não é uma expansão de variável válida. Você pode ter desejado usar algo como
mas isso pressupõe que
$remote_serial
contém o conteúdo de um documento JSON.Parece que deveria ser
ao invés de