次の2つのコマンドがあります。
これにより、リポジトリ名が提供されます。
az acr repository list -n registry -o tsv
出力は次のとおりです。
name1
name2
...
これはリポジトリの要約コードを提供します。
az acr manifest list-metadata -r ${REGISTRY} --name ${REPO} --query "[?tags[0]==null].digest" -o tsv
出力は次のとおりです。
digest1
digest2
...
リポジトリ名と要約コードを出力したいです。
試験を終えた:
az acr repository list -n registry -o tsv \
| xargs -I% az acr manifest list-metadata -r ${REGISTRY} --n % --query "[?tags[0]==null].digest" -o tsv \
| xargs -I% echo "%: %"
実際の出力:
digest_code: digest_code
予想出力:
repo_name: digestcode
ベストアンサー1
次のようなものが必要です。
export REPO
az acr repository list -n registry -o tsv |
while IFS= read -r REPO; do
az acr manifest list-metadata -r "$REGISTRY" --n "$REPO" --query '[?tags[0]==null].digest' -o tsv |
awk '{print ENVIRON["REPO"]": "$0}'
done
呼び出しは、awk
各インベントリコマンドの出力の前に対応するリポジトリ名を付けます。
または、各リポジトリ/ダイジェストペアで追加のコマンドを実行する必要がある場合:
az acr repository list -n registry -o tsv |
while IFS= read -r repo; do
az acr manifest list-metadata -r "$REGISTRY" --n "$repo" --query '[?tags[0]==null].digest' -o tsv |
while IFS= read -r digest; do
other-cmd --repo "$repo" --digest "$digest"
done
done
を使用すると、zsh
次の操作も実行できます。
for repo ( ${(f)"$(az acr repository list -n registry -o tsv)"} ) {
digests=( ${(f)"$(az acr manifest list-metadata -r $REGISTRY --n $repo --query '[?tags[0]==null].digest' -o tsv)"})
print -rC1 -- $repo': '$^digests
}
for repo ( ${(f)"$(az acr repository list -n registry -o tsv)"} )
for digest ( ${(f)"$(az acr manifest list-metadata -r $REGISTRY --n $repo --query '[?tags[0]==null].digest' -o tsv)"})
other-cmd --repo $repo --digest $digest
ではMakefile
次のようになります。
target:
az acr repository list -n registry -o tsv | \
while IFS= read -r repo; do \
az acr manifest list-metadata -r "$$REGISTRY" --n "$$repo" --query '[?tags[0]==null].digest' -o tsv | \
while IFS= read -r digest; do \
other-cmd --repo "$$repo" --digest "$$digest"; \
done; \
done
Makefileには複数の行がありますが、行を連結し、後続のsを削除して\
結果を渡す前に$$
sをsに変更するため、インラインシェルスクリプトOrderでそれを区切るにはいくつかのsを追加する必要があります。$
sh -c
;
より明確にするために、コードをスクリプトに入れることもできます。