Bash脚本/AWS集成
我正在尝试创建一个Bash脚本,它可以从一个命令中删除我的所有Amazon转录作业。 我创建了以下脚本:Bash脚本/AWS集成,bash,amazon-web-services,command-line-interface,Bash,Amazon Web Services,Command Line Interface,我正在尝试创建一个Bash脚本,它可以从一个命令中删除我的所有Amazon转录作业。 我创建了以下脚本: #!/bin/bash aws transcribe list-transcription-jobs --max-results 100 --query '[TranscriptionJobSummaries[*].TranscriptionJobName]' --output text while read jobName; do aws delete-transcription
#!/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
但是,在运行时,它会列出转录作业,但不会删除它们。事实上,删除作业后,它什么也不做!尽管如此,即使它什么也不做,它仍在继续处理作业
关于如何解决这个问题或我哪里出了问题,您有什么想法吗?您需要在读取
循环的标准输入时,将aws
命令的标准输出导入。您还需要切换到read-r
来禁用read
命令的一些遗留行为,尽管这在这里可能并不重要
aws转录列表转录作业--最大结果100--查询“[TranscriptionJobSummaries[*].TranscriptionJobName]”--输出文本|
而read-r作业名;做
aws删除转录作业--转录作业名称“$jobName”
完成
关键的修复是第一行末尾的|
。也许还可以阅读基本的壳牌管道
您最初的命令只是将Resultl列为标准输出,然后坐在那里等待read
命令从其他地方接收输入(实际上是从您的键盘)
如果aws delete transcription job
能够以某种方式接受一个作业列表,那么您可以完全取消while
循环。很遗憾,我不熟悉这个特定的命令。很简单
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命令:无效选择,
在顶部使用set-x
,看看哪里出了问题。我一直试图将作业名称还原为一个变量,以便运行delete,但它似乎不起作用。即使使用新代码,问题仍然存在,即使我将“|”替换为“;”“为什么要将
替换为”代码>?回到原点;分号在语法上等同于换行符。如果我使用|
它不会将其识别为代码,并给我一个错误什么错误?为什么您认为它不能被识别为代码?它说的是aws:error:argument command:Invalid choice,有效的选项是:
,后面是大量可能使用的命令