Поместите его в цикл while. Я также предлагаю вам добавить «сон», чтобы вы не разгоняли процессор своей машины так быстро, как это будет:
while true; do
##########################################################################
## CHECK TIME
##########################################################################
time=$(date +%k%M)
if [[ "$time" -ge 1800 ]] && [[ "$time" -le 2200 ]]; then
echo "Not a good time to transcode video!" && exit 0
else
echo "Excellent time to transcode video!" && echo "Lets get started!"
fi
##########################################################################
## CHECK TIME
##########################################################################
for i in {1..5}; do
echo $i
sleep 1
done
done
Вы можете «перезаписать», используя следующую строку:
exec bash "$0" "$@"
Поскольку $0
- это путь к текущему скрипту, эта строка запускает скрипт без создания нового процесса, t нужно беспокоиться о том, что слишком много перезапусков переполняют таблицу процессов на вашем компьютере.
Это не хорошая практика, но то, что вы просили.
Поместите это в конец вашего скрипта. "$( cd "$( dirname "$0" )" && pwd )/$(basename $0)"
exec
, чтобы заменить старый экземпляр новым на месте, тогда вы получаете непрерывную цепочку процессов, когда вы это делаете. И какова добавленная стоимость dirname
/ basename
, а не только exec "$BASH_SOURCE" "$@"
?
– Charles Duffy
23 October 2017 в 21:43
НЕ ИСПОЛЬЗУЙТЕ WHILE LOOP в начале сценария, так как условие ниже приведет к выходу из сценария и сломает цикл.
echo "Not a good time to transcode video!" && exit 0
Вы можете попробовать захватить выходной сигнал, чтобы при выходе сценария он перезапускает
##########################################################################
## CHECK TIME
############bash##############################################################
trap '<path to script> ' EXIT
time=$(date +%k%M)
if [[ "$time" -ge 1800 ]] && [[ "$time" -le 2200 ]];then
echo "Not a good time to transcode video!" && exit 0
sleep 1;
else
echo "Excellent time to transcode video!" && echo "Lets get started!"
sleep 1;
fi
##########################################################################
## CHECK TIME
##########################################################################
echo 1
echo 2
echo 3
echo 4
echo 5
startover
Примечание. Я добавляю спать 1 секунду, потому что это даст вам время для просмотра сообщения. ловушка выходного сигнала и повторный запуск скрипта действует как цикл while. Я также предполагаю, что эти коды находятся в скрипте.
Как насчет включения всего скрипта в цикл while
? Например,
while :
do
script
done
Возможно, вы захотите добавить условие для выхода из цикла.