
2000
올바른 값을 반환하는 jq 명령의 값을 전달하는 컬이 아래에 있습니다.
curl -X GET \
-H 'vmware-api-session-id: <auth-id>' \
-k -s
'https://<url>/api/vcenter/vm/vm-22' | python -m json.tool | jq -r '.disks."2000" | .label, .capacity' | paste - -
Hard disk 1 52143587328
2000
이제 변수의 이 부분이 생겼습니다 . 좋아요 i=2000
와 jq 좋아요
jq -r '.disks."$i"
반품
null null
2000
변수를 통해 전달하는 방법을 알 수 없습니다.
답변1
jq -r --arg i "$i" '.disks[$i] | [ .label, .capacity ] | @tsv'
그러면 아래와 같이 쉘 변수가 표현식 i
에 전달됩니다.jq
jq
바꾸다 $i
(이것은 문자열입니다). 열쇠로 사용할 수 있습니다 [$i]
.
paste
@tsv
또한 원하는 두 값을 포함하는 배열을 사용함으로써 사용할 필요성도 없애줍니다 jq
. 그러면 명령과 마찬가지로 탭으로 구분된 출력이 생성됩니다 paste
.
데이터를 전달할 필요도 없습니다 python -m json.tool
(이점이 무엇인지 모르겠습니다). 예쁜 인쇄용으로 사용하는 경우에는 jq
.
보고 있다VMware API 문서, 특정 디스크에 대한 정보를 가져오기 위한 요청은 다음과 같습니다.
https://{api_host}/api/vcenter/vm/{vm}/hardware/disk/{disk}
vm-22
이로 인해 및/또는 대신 은 VM의 이름이고 디스크 식별자를 사용해야 한다고 생각합니다 .{vm}
2000
"$i"
{disk}
vm-22
2000
이것은 당신에게 다음과 같은 것을 줄 것입니다
{
"backing": {
"type": "enum",
"vmdk_file": "string"
},
"capacity": 0,
"ide": {
"master": false,
"primary": false
},
"label": "string",
"sata": {
"bus": 0,
"unit": 0
},
"scsi": {
"bus": 0,
"unit": 0
},
"type": "enum"
}
답으로.
다음을 사용하여 라벨과 용량을 탭으로 구분된 목록으로 구문 분석할 수 있습니다.
jq -r '[ .label, .capacity ] | @tsv'