Как устранить эту неоднозначную ошибку Azure?

Я использую команды запуска для выполнения сценариев bash через сценарии bash Azure CLI на виртуальной машине RHEL 7.

Я получаю сообщение об ошибке, когда есть фрагмент команды запуска:

   az vm run-command invoke --name ${THIS_VM_NAME} \
            --command-id RunShellScript \
            --resource-group ${RSC_GRP_NAME} \
            --query "output[].message | join('\n\n', @)" \
            --scripts "
cat > /etc/init.d/parity <<'EOF'
${INIT_D_PARITY}
exit 0
EOF

chmod +x /etc/init.d/parity

service parity restart

sleep 5

ls -la /var/log/parity.err
ls -la /var/log/parity.log
ls -la /var/log/parity.node.log

echo '_____________________________________________'
echo 'Parity Error Log:'
tail -n 5 /var/log/parity.err
echo '_____________________________________________'

ls -la /usr/libs/libssl*

parity -v

cat /var/log/parity.node.log | grep -oEi '(enode.*@)' | tail -n 1 | sed 's/enode:\/\///' | sed 's/@.*//' > /etc/parity/enode.pub

ls -la /etc/init.d/parity
ls -la /etc/parity/enode.pub

cat /etc/parity/enode.pub
echo 'Parity is Up an running \o/'
" 

Вот сообщение об ошибке:

В функции join() недопустимый тип значения: None, ожидается одно из: ['строка-массива'], получено: "null" Traceback (последний вызов последний):


person Samuel Dare    schedule 03.09.2018    source источник
comment
Запустите bash только с join('\n\n', @) и проверьте, какие значения там должны быть и какое значение содержит здесь @.   -  person Justinas    schedule 03.09.2018
comment
Этот конвейер cat | grep | awk | sed, вероятно, следует реорганизовать. См. бесполезное использование grep   -  person tripleee    schedule 05.09.2018
comment
@CharlesXu-MSFT, новая версия cli использует value не для вывода. Вот что ломало   -  person Samuel Dare    schedule 07.09.2018
comment
@Data_Kid Если вы имеете в виду, что команда должна быть value[].message | join('\n\n', @)?   -  person Charles Xu    schedule 07.09.2018
comment
именно так. @CharlesXu-MSFT   -  person Samuel Dare    schedule 07.09.2018


Ответы (1)


join() — это функция JMESPath, которая является языком запросов для JSON. Вот простой пример:

Множество:

{
  "locations": [
    {"name": "Seattle", "state": "WA"},
    {"name": "New York", "state": "NY"},
    {"name": "Bellevue", "state": "WA"},
    {"name": "Olympia", "state": "WA"}
  ]
}

Код запроса:

locations[?state == 'WA'].name | sort(@) | {WashingtonCities: join(', ', @)}

Результат:

{
  "WashingtonCities": "Bellevue, Olympia, Seattle"
}

Подробную информацию о вашей проблеме можно получить по этой ссылке. Я думаю, что если вывод представляет собой массив, то функция join() будет работать хорошо. Если нет, то придет такая же ошибка, как и у вас.

person Charles Xu    schedule 05.09.2018