Использование переменной для выполнения команды curl

С помощью zsh : с

cd /media/storage/**/Fedora([1]:h)

по компакт-диск в первый (в алфавитном порядке) каталог, содержащий файл с именем Fedora .

  • ** : любой уровень каталогов (скрытые каталоги по умолчанию опущены, используйте квалификатор glob D , чтобы включить их)
  • [1]: только первый
  • : h ]: head модификатор: взять имя каталога.

В отличие от cd "$ (find ...)" , он также работает, если имя каталога заканчивается символом новой строки. Еще одно преимущество состоит в том, что вы получите сообщение об ошибке no match , когда нет подходящего каталога (в то время как в большинстве оболочек cd "" ничего не делает в автоматическом режиме).

Недостатком является то, что перед возвратом он будет сканировать весь / media / storage .

1
13.03.2017, 14:14
1 ответ

Переменная предназначена для данных, а не кода. Определите функцию. Это также упрощает ваше цитирование.

#!/bin/bash

userName="user"
passWord="password"
tenantName="tenant"

commande () {
    curl -X POST \
         -H "Content-Type: application/json" \
         -H "Cache-Control: no-cache" \
         -H "Postman-Token: ..." \
         -d@- \
         http://controller:5000/v2.0/tokens <<EOF
    {
      "auth": {
        "tenantName": "$tenantName",
        "passwordCredentials": {
          "username": "$userName",
          "password": "$password"
        }
      }
    }
EOF
}

Вышеупомянутое также считывает JSON из здесь-документа ( @ - считывает аргумент для параметра -d из стандартного ввода) вместо того, чтобы встраивать его в строку для дальнейшего упростить цитирование.

Тем не менее, также плохая идея вручную кодировать JSON таким образом, если вы не гарантируете, что значения userName , passWord и tennatnName правильно закодированы в JSON. Лучшее решение - использовать что-то вроде jq , чтобы сгенерировать для вас правильный JSON.

commande () {
  json_template='{
    auth: {
      tenantName: $tn,
      passwordCredentials: {
        username: $un,
        password: $pw
      }
    }
  }'
  jq -n --arg un "$userName" \
        --arg pw "$passWord" \
        --arg tn "$tenantName" "$json_template" |
    curl -X POST
         -H "Content-Type: application/json" \
         -H "Cache-Control: no-cache" \
         -H "Postman-Token: ..." \
         -d@- \
         http://controller:5000/v2.0/tokens
}
9
27.01.2020, 23:13

Теги

Похожие вопросы