Скрипт Bash / интеграция с AWS - PullRequest
0 голосов
/ 17 октября 2019

Я пытаюсь создать Bash Script, который может удалить все мои задания Amazon Transcribe с помощью одной команды. Я создал следующий скрипт:

#!/bin/bash

aws transcribe list-transcription-jobs --max-results 100 --query '[TranscriptionJobSummaries[*].TranscriptionJobName]' --output text
while read jobName; do
    aws delete-transcription-job --transcription-job-name "$jobName"
done

Однако, когда он запускается, он перечисляет задания транскрипции, но не удаляет их. Фактически, это ничего не делает после удаления заданий! Хотя он продолжает обрабатывать работу, даже через это ничего не делает.

Есть идеи, как это исправить или где я ошибаюсь?

Ответы [ 2 ]

1 голос
/ 17 октября 2019

Вам необходимо передать стандартный вывод команды aws в стандартный ввод цикла while read. Вы также захотите переключиться на read -r, чтобы отключить некоторые устаревшие функции команды read, хотя, вероятно, здесь это не имеет значения.

aws transcribe list-transcription-jobs --max-results 100 --query '[TranscriptionJobSummaries[*].TranscriptionJobName]' --output text |
while read -r jobName; do
    aws delete-transcription-job --transcription-job-name "$jobName"
done

Важнейшим исправлением является | вконец первой строки. Возможно, также прочитайте об основных конвейерах оболочки.

Ваша оригинальная команда просто перечислит результаты в стандартный вывод, затем сядет и будет ждать, пока команда read получит свой ввод откуда-то еще (реально, от вашегоклавиатура).

Если aws delete-transcription-job может каким-либо образом принять список заданий, возможно, вы можете полностью отказаться от цикла while. К сожалению, я не знаком с этой конкретной командой.

0 голосов
/ 17 октября 2019

Просто

IFS="
"
for jobName in `aws transcribe list-transcription-jobs --max-results 100 --query '[TranscriptionJobSummaries[*].TranscriptionJobName]' --output text`; do
    aws delete-transcription-job --transcription-job-name "$jobName"
done
...