Использование команды Azure Curl с долларом - PullRequest
0 голосов
/ 23 марта 2019

Привет! Я использую команду curl для получения журнала активности Azure. curl -X GET https://management.azure.com/subscriptions/xxxxxxxxxxxxxxxxxxxx/providers/microsoft.insights/eventtypes/management/values?api-version=2015-04-01&$filter=eventTimestamp ge '2019-03-18T20:00:00Z' and eventTimestamp le '2019-03-23T20:00:00Z' and resourceGroupName eq 'xxxx'

ошибка подачи bash: =eventTimestamp: command not found Как решить эту проблему?

1 Ответ

0 голосов
/ 23 марта 2019

&$ являются специальными символами оболочки.& помещает предыдущую команду в фоновом режиме.$filter оценивает переменную с именем filter, которая, очевидно, пуста.Итак, вы остались со второй командой =eventTimestamp с некоторыми параметрами, и bash жалуется.Обычно указывайте ваш URL в ''.Но это становится сложнее, потому что у вас есть одинарные кавычки в URL.Если вы введете это значение, вам нужно закрыть кавычку перед любым литералом ' и использовать \' для каждого ', а затем снова открыть кавычку.

curl -X GET 'https://management.azure.com/subscriptions/xxxxxxxxxxxxxxxxxxxx/providers/microsoft.insights/eventtypes/management/values?api-version=2015-04-01&$filter=eventTimestamp ge '\''2019-03-18T20:00:00Z'\'' and eventTimestamp le '\''2019-03-23T20:00:00Z'\'' and resourceGroupName eq '\''xxxx'\''

Вы можете обойти эту проблему, набрав urlsнапример, в файле читайте его содержимое в переменную оболочки следующим образом:

url=$(cat url_file)

или в форме документа здесь:

url=$(cat <<'EOF'
https://management.azure.com/subscriptions/xxxxxxxxxxxxxxxxxxxx/providers/microsoft.insights/eventtypes/management/values?api-version=2015-04-01&$filter=eventTimestamp ge '2019-03-18T20:00:00Z' and eventTimestamp le '2019-03-23T20:00:00Z' and resourceGroupName eq 'xxxx'
EOF
)

, а затем выполните:

curl -X GET "$url"

Также будут работать специальные символы Url-кодирования.

Если вам это нужно, вы можете использовать эту функцию оболочки для цитирования строк, содержащих одинарные кавычки:

quotifySingle() {
    #does the same as
    #printf %s\\n "$(printf %s "$1" | sed "s/'/'\\\\''/g")"
    local input="$1"
    local tmp=''

    while [ ${#input} -gt 0 ]
    do
      tmp=${input#?}
      case ${input} in
        \'*)   printf \'\\\'\'      ;;
          *)   printf %s "${input%"${tmp}"}"  ;;
      esac
      input=${tmp}
    done

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...