aws cli:aws ec2 describe-images:循环和从文件读取

时间:2017-10-10 18:52:42

标签: bash shell amazon-web-services

我正在尝试运行一个shell脚本来循环一个图像ID列表来查找元数据

#!/bin/bash
values=$(<$PWD/amis_ID.txt)
for value in $values
do 
  aws ec2 describe-images --region="us-****-1" --image-ids "$value"
done

示例amis_ID_only.txt

ami-11c3b374
ami-3dd32356
ami-ae3222c6
ami-4cdd9b26
ami-21a7e964
ami-c928e732
ami-15add3ff
ami-2b8e3820
ami-fs0dhswe
...

当我打印$ values时,我觉得很好

然后for循环错误

 "n error occurred (InvalidAMIID.Malformed) when calling the DescribeImages operation: Invalid id: "ami-11c3b374 

继续循环。

我在for循环中尝试使用和不使用$ for value的引号。还在考虑文件格式是否错误?请告诉我有建议我是否需要清理文件,删除特殊字符,标签,sed,awk等空格或其他任何东西,如果我遗漏了什么。 或者如果这种循环方式甚至可以用于aws ec2 describe

仅供参考:只运行aws ec2 describe-images --image-ids <ami-id>工作,吐出一个json

2 个答案:

答案 0 :(得分:1)

您很少想直接在bash中循环文件内容。它很慢,很丑......

首选(也是更好)的方式是 - 例如:

<amis_ID.txt xargs -I{} \
  aws ec2 describe-images --region="us-****-1" --image-ids "{}"

答案 1 :(得分:0)

这是一个文件格式问题。我的原始解决方案有效或任何其他解决方案都可行该文件采用dos格式。

这就是我所做的:在procedure TReceiverMainForm.OnAppMessageReceived(const ASender : TPair<HWND, string>; const AReceivedData: TCopyDataStruct; var AResult: integer); var Info: PTypeInfo; Data: PTypeData; KindName: String; SubName: String; _TypeInfo: TTypeInfo; _MyRec: TMyRec; begin .... else begin memLog.Lines.Add('Unknown data received.'); if (AReceivedData.dwData) = integer(TCopyDataType.cdtRecord) then begin memLog.Lines.Add('Record received.'); // This one works fine if "_Stream.Write(NativeInt(ARecordType), SizeOf(TTypeInfo));" // is commented out //_MyRec := GetProcessMyRec(ASender.Key, pointer(NativeUint(AReceivedData.lpData^)), SizeOf(TMyRec)); _TypeInfo := GetProcessTypeInfo(ASender.Key, Pointer(AReceivedData.lpData^), SizeOf(TTypeInfo)); Info := System.TypeInfo(TMyRec); if (_TypeInfo.Name = Info^.Name) and (_TypeInfo.Kind = Info^.Kind) then begin // _MyRec := GetProcessMyRec(ASender.Key, Pointer(AReceivedData.lpData^), SizeOf(TMyRec)); works _MyRec := GetProcessMyRec(ASender.Key, pointer(NativeInt(AReceivedData.lpData^) + SizeOf(TTypeInfo)), SizeOf(TMyRec)); ShowMessage(_MyRec.Name + ', Age: ' + IntToStr(_MyRec.Age) + ', birthday: ' + DateToStr(_MyRec.Birthday)); end; end; AResult := -1; end; end; 编辑器中打开文件并用

修复行尾

vi

感谢所有解决方案