Можно ли вывести несколько значений в разные файлы из одного вызова jq? - PullRequest
0 голосов
/ 01 ноября 2019

У меня есть завиток, где я хотел бы извлечь два текста в два разных файла, file1.crt и file2.key. в настоящее время настроен таким образом, повторяя curl.

curl -X GET -H "X-Vault-Token:{{ vault_token }}" https://fopp.com/v1/ACME/data/SSL/fopp.com | jq -r .data.data.crt > /files/nginx/ssl/file1.crt && 
curl -X GET -H "X-Vault-Token:{{ vault_token }}" https://fopp.com/v1/ACME/data/SSL/fopp.com | jq -r .data.data.key > /files/nginx/ssl/file2.key

Я хотел бы знать, может ли с помощью jq обрабатывать для извлечения только одной командой.

1 Ответ

1 голос
/ 01 ноября 2019

Не только с jq, но его достаточно легко комбинировать с небольшим количеством оболочки. Если ваши значения не могут содержать буквальные символы новой строки, это может быть так просто:

curl -X GET -H "X-Vault-Token:{{ vault_token }}" https://fopp.com/v1/ACME/data/SSL/fopp.com \
| jq -r '.data.data.crt, .data.data.key' \
| { IFS= read -r crt && printf '%s\n' "$crt" > /files/nginx/ssl/file1.crt;
    IFS= read -r key && printf '%s\n' "$key" > /files/nginx/ssl/file2.key; }

Если значения могут содержать символы новой строки, то вам нужно использовать другой разделитель. Рассмотрим:

curl -X GET -H "X-Vault-Token:{{ vault_token }}" https://fopp.com/v1/ACME/data/SSL/fopp.com \
| jq -j '.data.data.crt, "\u0000", .data.data.key, "\u0000"' \
| { IFS= read -r -d '' crt && printf '%s\n' "$crt" > /files/nginx/ssl/file1.crt;
    IFS= read -r -d '' key && printf '%s\n' "$key" > /files/nginx/ssl/file2.key; }
...