Shell Script Error - Não é possível alimentar a saída de uma variável para outra variável

0

Estou recebendo o erro abaixo durante a execução de um script de shell: (Bash)

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

então quando eu olhar para o shell script há duas linhas do script que está causando o problema, o que eu acho é que a saída da Linha 1 é usada como uma entrada da Linha 2 (--resource $ remote_snapshot_id) em meu caso:

Linha 1:

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

Linha 2:

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

Quando tento executar a Linha 1, como um único comando no Linux Terminal:

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

Saída:

{
    "SnapshotId": "snap-00880090900090"
}

Mas a Linha 2 requer apenas o valor snap-00880090900090 da Saída da Linha 1. (como é atualmente escolhendo todo o out posto a partir de "{ele está dando tal erro, pois só exigem snap-00880090900090)

Então, a minha pergunta é como posso grep snap-00880090900090 & armazena essa saída para alimentar a Linha 2 (--resource $ remote_snapshot_id)

alguém pode ajudar a consertar isso, por favor?

    
por Subash 08.02.2017 / 14:15

1 resposta

2

How can I grep snap-00880090900090 [from { "SnapshotId": "snap-00880090900090" }]?

Como o formato do qual você pretende extrair é o JSON, isso é melhor realizado usando ferramentas compatíveis com JSON. Eu recomendaria jq se você puder obtê-lo instalado:

command | jq -r .SnapshotId

Se command gerar o snippet JSON que você mencionou, o jq comando irá produzir apenas snap-00880090900090 (sem aspas, ou "raw", graças à opção -r ).

Se você não conseguir instalar uma ferramenta adequada para JSON, pode viver com mais solução frágil, e sabemos que a ID do snaphot sempre terá o formulário mostrado no seu exemplo ("snap-" seguido por uma sequência de dígitos), então você pode extrair assim, usando o GNU grep:

command | grep -o 'snap-[0-9]\+'
    
por 08.02.2017 / 14:48