#bash #shell
#bash #оболочка
Вопрос:
Мне нужно постоянно проверять условие statt
до тех пор, пока оно не будет выполнено Yes
, если No
открыть веб-сайт только один раз и продолжать проверять условие statt
, не открывая веб-страницу снова и снова.
каков будет правильный подход?
statt=$(cat /private/tmp/homee/tat) ##This is a example, in real I am running a command here.
while [[ $statt == "No" ]]
do
statt=$(cat /private/tmp/homee/tat)
if [[ $statt == "No" ]]; then
open https://statckoverflow.com//. ##Only want to open webpage once and wait until condition Yes.
fi
done
echo "Continue Script....."
Ответ №1:
Поскольку ваш while
цикл выполняется во время $statt == "No"
выполнения, вы можете вызывать open
после while
цикла, поэтому вы уверены, что $statt != "No"
;
statt=$(cat /private/tmp/homee/tat)
while [[ $statt == "No" ]]
do
statt=$(cat /private/tmp/homee/tat)
done
# After while; so $statt is not 'No', call open once
open https://statckoverflow.com//.
echo "Continue Script....."
Ответ №2:
Это должно достичь того, чего вы хотели :
#!/usr/bin/env bash
first_time=1
while test "$(</private/tmp/homee/tat)" = no; do
if test "$first_time" = 1; then
open https://statckoverflow.com//. ##Only want to open webpage once and wait until condition Yes.
first_time=0
fi
sleep 1
done
echo "Continue Script....."
Или, если вы можете переместить open
команду за пределы while
цикла, вы можете просто сделать
#!/usr/bin/env bash
open https://statckoverflow.com//. ##Only want to open webpage once and wait until condition Yes.
while test "$(</private/tmp/homee/tat)" = no; do
sleep 1
done
echo "Continue Script....."
Ответ №3:
Нравится это?
#!/bin/dash
opened='0'
statt="$(command ...)"
while [ "$statt" = 'No' ] ; do
statt="$(command ...)"
if [ "$statt" = 'Yes' ]; then
# do something
elif [ "$opened" -eq 0 ]; then
opened='1'
open 'https://stackoverflow/...'
fi
sleep 1
done