现在,我在脚本(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"
在两种情况下,结果几乎都是相同的。 我做错了什么?有什么帮助吗?
答案 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
您在代码中看到的问题在某些地方还很\
。否则,您的代码可以正常工作。