如何知道实例是否正在使用bash和awscli运行?

时间:2019-09-18 21:42:07

标签: bash amazon-ec2 aws-cli

现在,我在脚本(bash)中使用awscli发送请求,以在创建实例后检查实例状态。 但我收到此消息:

/bin/bash: eval: line 130: syntax error: unexpected end of file

我尝试了两种方法:

第一个:

while INSTANCE_STATE=$(aws ec2 describe-instances \
--instance-ids $INSTANCE_ID --output text  \
--query 'Reservations[*].Instances[*].State.Name');  \
test "$INSTANCE_STATE" = "pending";  \
do sleep 1; echo -n '.' done;  \
echo " $INSTANCE_STATE"

然后,另一个:

until [ test "$INSTANCE_STATE" = "running" ] do \
echo 'Wait for instance.'; \
INSTANCE_STATE=$(aws ec2 describe-instances \
--instance-ids $INSTANCE_ID --output text \
--query 'Reservations[*].Instances[*].State.Name'); \
sleep 2; echo -n '.' done; \
echo " $INSTANCE_STATE"

在两种情况下,结果几乎都是相同的。 我做错了什么?有什么帮助吗?

1 个答案:

答案 0 :(得分:0)

以下是一个班轮命令:

while INSTANCE_STATE=$(aws ec2 describe-instances --instance-ids $INSTANCE_ID --output text --query 'Reservations[*].Instances[*].State.Name'); test "$INSTANCE_STATE" = "pending"; do sleep 1; echo -n '.'; done

下面是shell脚本:

#!/bin/bash
INSTANCE_ID=
while INSTANCE_STATE=$(aws ec2 describe-instances --instance-ids $INSTANCE_ID --output text --query 'Reservations[*].Instances[*].State.Name');
test "$INSTANCE_STATE" = "running"
do
sleep 1
echo -n '.'
done
echo " $INSTANCE_STATE"

您应该坚持使用第一个代码,因为另一个代码首先评估条件,然后分配值,而在第一个代码中,首先评估值,然后评估,这将节省分配变量的步骤。

由于上述原因,其他代码抛出以下错误:

line 3: [: too many arguments

您在代码中看到的问题在某些地方还很\。否则,您的代码可以正常工作。