쉘 스크립트 오류 - 한 변수의 출력을 다른 변수에 공급할 수 없습니다

쉘 스크립트 오류 - 한 변수의 출력을 다른 변수에 공급할 수 없습니다

쉘 스크립트를 실행할 때 다음 오류가 발생합니다: (Bash)

An error occurred (InvalidID) when calling the CreateTags operation: The ID ‘{‘ is not valid”

그래서 쉘 스크립트를 살펴보면 문제를 일으키는 두 줄의 스크립트가 있었고 제 경우에는 줄 1의 출력이 줄 2(--resource $remote_snapshot_id)의 입력으로 사용되었음을 발견했습니다.

라인 1:

remote_snapshot_id=$(aws ec2 copy-snapshot --region us-east-1 --source-region $region --source-snapshot-id $snapshot_id --description $snapshot_id)

2호선:

aws ec2 create-tags --region us-east-1 --resource $remote_snapshot_id --tags Key=CreatedBy,Value=AutomatedBackup

Linux 터미널에서 라인 1을 단일 명령으로 실행하려고 하면 다음과 같습니다.

aws --region us-east-1 ec2 copy-snapshot --source-region us-west-1 --source-snapshot-id snap-00220030300040 --description "Automated_Backup_425"

산출:

{
    "SnapshotId": "snap-00880090900090"
}

그러나 2행에는 1행 출력의 snap-00880090900090 값만 필요합니다. (현재 "{"로 시작하는 전체 출력을 선택하고 있기 때문에 snap-00880090900090만 사용하므로 이와 같은 오류가 발생합니다)

제 질문은 snap-00880090900090을 grep하고 2번 라인(--resource $remote_snapshot_id)에 사용할 출력을 저장하는 방법입니다.

이 문제를 해결하는 데 도움을 줄 수 있는 사람이 있나요?

답변1

snap-00880090900090 [from]을 어떻게 grep합니까 { "SnapshotId": "snap-00880090900090" }?

추출하려는 형식은 JSON이므로 JSON 인식 도구를 사용하여 이 작업을 수행하는 것이 가장 좋습니다. jq설치할 수 있다면 다음을 권장합니다.

command | jq -r .SnapshotId

command언급한 JSON 조각을 출력하는 경우 명령은 옵션으로 인해 따옴표 또는 "원시" 없이 jq 출력됩니다 .snap-00880090900090-r

적절한 JSON 인식 도구를 설치할 수 없고 더 취약한 솔루션을 수용할 수 있으며 스냅샷 ID가 항상 예에 표시된 형식("snap-" 뒤에 일련의 숫자가 옴)을 갖는다는 것을 알고 있다면 다음과 같이 GNU grep을 사용할 수 있습니다.

command | grep -o 'snap-[0-9]\+'

관련 정보