Как узнать, работает ли экземпляр, используя bash и awscli? - PullRequest
0 голосов
/ 19 сентября 2019

Сейчас я использую awscli в своем скрипте (bash) для отправки запроса, проверяющего состояние экземпляра после его создания.Но я получаю это сообщение:

/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 голосов
/ 19 сентября 2019

Ниже приведена одна команда вкладыша:

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

Ниже приведен сценарий оболочки:

#!/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

В некоторых местах проблема, с которой вы сталкиваетесь, является дополнительной \.В противном случае ваш код работает нормально.

...