首页 > 解决方案 > Bash 脚本/AWS 集成

问题描述

我正在尝试创建一个 Bash 脚本,该脚本可以从单个命令中删除我的所有 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

但是,当它运行时,它会列出转录作业,但不会删除它们。事实上,删除作业后它什么都不做!尽管如此,即使它什么也不做,它也会继续处理这项工作。

关于如何解决这个问题或我哪里出错的任何想法?

标签: bashamazon-web-servicescommand-line-interface

解决方案


您需要将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

关键的修复是|在第一行的末尾。也许还阅读了基本的 shell 管道。

您的原始命令将简单地将结果列出到标准输出,然后坐在那里等待read命令从其他地方(实际上是从您的键盘)接收其输入。

如果aws delete-transcription-job可以以某种方式接受工作列表,也许您可​​以while完全取消循环。不幸的是,我不熟悉这个特定的命令。


推荐阅读