【问题标题】:Bash Script / AWS IntegrationBash 脚本/AWS 集成
【发布时间】:2019-10-17 13:46:20
【问题描述】:

我正在尝试创建一个 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

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

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

【问题讨论】:

    标签: bash amazon-web-services command-line-interface


    【解决方案1】:

    您需要将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 循环。不幸的是,我不熟悉这个特定的命令。

    【讨论】:

    • 我一直在尝试将作业名称恢复为本身的变量,以便删除运行,但它似乎不起作用。即使使用您的新代码,问题仍然存在,即使我替换了“|”用“;”
    • 为什么要用; 替换|?回到第一方;分号在语法上等同于换行符。
    • 如果我使用 | 它不会将其识别为代码并给我一个错误
    • 什么错误?为什么你认为它不被识别为代码?
    • 上面写着aws: error: argument command: Invalid choice, valid choices are:,后面是一大串可能使用的命令
    【解决方案2】:

    简单

    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
    

    【讨论】:

    • 我尝试了以下代码,但收到了一个错误,这是我从我尝试过的先前版本中收到的错误。错误信息如下:aws: error: argument command: Invalid choice,
    • 在顶部使用set -x,看看有什么问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-29
    • 1970-01-01
    • 1970-01-01
    • 2021-09-11
    • 1970-01-01
    • 1970-01-01
    • 2015-04-18
    相关资源
    最近更新 更多