Ошибка сценария оболочки - невозможно передать выходные данные из одной переменной в другую переменную

Я получаю следующую ошибку при выполнении сценария оболочки: (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

Когда я пытаюсь выполнить Строку 1 как единственную команду в Терминале Linux:

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 требуется только значение snap-00880090900090 из вывода Строки 1. (так как в настоящее время он выбирает весь вывод, начиная с "{он выдает такую ​​ошибку, поскольку для этого требуется только snap-00880090900090)

Итак, мой вопрос в том, как я могу grep snap-00880090900090 и сохранить этот вывод для подачи для строки 2 ( --resource $ remote_snapshot_id)

Кто-нибудь может помочь исправить это, пожалуйста?

0
09.02.2017, 09:30
1 ответ

Как я могу grep snap-00880090900090 [from {"SnapshotId": "snap-00880090900090"} ]?

Поскольку формат, из которого вы собираетесь извлечь, - JSON. Лучше всего выполнить это с помощью инструментов, поддерживающих JSON. Я бы порекомендовал jq , если вы можете установить его:

command | jq -r .SnapshotId

Если команда выводит упомянутый вами фрагмент JSON, то jq { Команда {1}} выведет только snap-00880090900090 (без кавычек или "raw", благодаря опции -r ).

Если вы не можете установить надлежащий инструмент с поддержкой JSON, можете использовать более хрупкое решение и знать, что идентификатор снимка всегда будет иметь форму , показанную в вашем примере ("snap - "за которым следует последовательность цифр), , затем вы можете извлечь это следующим образом, используя GNU grep:

command | grep -o 'snap-[0-9]\+'
1
28.01.2020, 02:46

Теги

Похожие вопросы