Bash azure cli 查询脚本,输出不是我想要的
Bash script for azure cli query, output not quite what I want
我有一个要用于 Azure 的脚本 return 资源组、存储帐户名称、存储容器名称、blob 对象的名称、blob 对象的大小和存储层。
我有以下内容:
#!/bin/bash
resourceGroup=
storageAccount=
containers="$(az storage container list --account-name --auth-mode login --query "[].[name]" -o tsv)"
for c in $containers
do
blob_info=$(az storage blob list --account-name \
--auth-mode login --container-name ${c} \
--query "[].[container,name,properties.contentLength,properties.blobTier]"
-o tsv)
echo "$resourceGroup,$storageAccount,$blob_info" | tr '\t' ','
done
当 JSON 中有多个 blob 项时,我希望输出显示资源组和存储帐户以及每个 blob 项的完整 blob_info,如下所示:
$resourceGroup,$storageAccount,$blob_info
$resourceGroup,$storageAccount,$blob_info
然而,当一个 JSON 中有 2 个 blob 项时,输出看起来像这样(它不会回显同一 JSON 中第二个 blob 项的 $resourceGroup,$storageAccount输出)。
$resourceGroup,$storageAccount,$blob_info
$blob_info
我想这很简单,我一定在这里遗漏了。
像这样应该更正确:
#!/bin/bash
resourceGroup=
storageAccount=
IFS=$'\t\n' read -d '' -r -a containers < <(
az storage container list \
--auth-mode login \
--account-name "$storageAccount" \
--query '[].[name]' \
-o tsv
)
# unescape TSV values
for i in "${!containers[@]}"
do
printf -v 'containers[i]' %b "${containers[i]}"
done
for container in "${containers[@]}"
do
while IFS='' read -r blob_info
do
printf '%b\n' "$(tr '\t' ',' <<< "$resourceGroup,$storageAccount,$blob_info")"
done < <(
az storage blob list \
--auth-mode login \
--account-name "$storageAccount" \
--container-name "$container" \
--query '[].[container,name,properties.contentLength,properties.blobTier]' \
-o tsv
)
done
我有一个要用于 Azure 的脚本 return 资源组、存储帐户名称、存储容器名称、blob 对象的名称、blob 对象的大小和存储层。
我有以下内容:
#!/bin/bash
resourceGroup=
storageAccount=
containers="$(az storage container list --account-name --auth-mode login --query "[].[name]" -o tsv)"
for c in $containers
do
blob_info=$(az storage blob list --account-name \
--auth-mode login --container-name ${c} \
--query "[].[container,name,properties.contentLength,properties.blobTier]"
-o tsv)
echo "$resourceGroup,$storageAccount,$blob_info" | tr '\t' ','
done
当 JSON 中有多个 blob 项时,我希望输出显示资源组和存储帐户以及每个 blob 项的完整 blob_info,如下所示:
$resourceGroup,$storageAccount,$blob_info
$resourceGroup,$storageAccount,$blob_info
然而,当一个 JSON 中有 2 个 blob 项时,输出看起来像这样(它不会回显同一 JSON 中第二个 blob 项的 $resourceGroup,$storageAccount输出)。
$resourceGroup,$storageAccount,$blob_info
$blob_info
我想这很简单,我一定在这里遗漏了。
像这样应该更正确:
#!/bin/bash
resourceGroup=
storageAccount=
IFS=$'\t\n' read -d '' -r -a containers < <(
az storage container list \
--auth-mode login \
--account-name "$storageAccount" \
--query '[].[name]' \
-o tsv
)
# unescape TSV values
for i in "${!containers[@]}"
do
printf -v 'containers[i]' %b "${containers[i]}"
done
for container in "${containers[@]}"
do
while IFS='' read -r blob_info
do
printf '%b\n' "$(tr '\t' ',' <<< "$resourceGroup,$storageAccount,$blob_info")"
done < <(
az storage blob list \
--auth-mode login \
--account-name "$storageAccount" \
--container-name "$container" \
--query '[].[container,name,properties.contentLength,properties.blobTier]' \
-o tsv
)
done