2014-12-01 5 views
4

Например, в приведенном ниже сценарии startover начинается с самого верха:Как я могу сказать, что скрипт bash начинается сверху?

########################################################################## 
## 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 
########################################################################## 
startover 

также имея в виду exit 0 должны быть в состоянии остановить скрипт.

ответ

6

Поместите его в цикл 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 
1

Как насчет охватывающую весь сценарий в while цикле? Например,

while : 
do 
    script 
done 

Возможно, вы захотите добавить условие, чтобы выйти из цикла.

1

Это не очень хорошая практика, но то, о чем вы просили.

Поместите это в конце своего сценария. "$(cd "$(dirname "$0")" && pwd)/$(basename $0)"

+0

./test.sh: строка 17: /Users/username/Documents./test.sh: Нет такого файла или каталога –

+0

Хороший улов. Забыл использовать команду basename на $ 0. Должен работать сейчас. – MeetTitan

+0

Если вы не используете 'exec', чтобы заменить старый экземпляр новым на месте, тогда вы получаете непрерывную цепочку процессов, когда вы это делаете. И какова добавленная стоимость 'dirname' /' basename', а не просто 'exec '$ BASH_SOURCE" "$ @" '? –

2

НЕ ИСПОЛЬЗУЙТЕ ПОСТОЯННУЮ ЗАГРУЗКУ в начале сценария, так как приведенное ниже условие выйдет из сценария и сломает цикл.

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. Я также предполагаю, что эти коды написаны в сценарии.

+0

К Дэвиду Кастеру: , если вы используете цикл while, начинающийся в верхней части вашего скрипта. Ваш скрипт выйдет, если он достигнет условия ниже: echo «Не лучшее время для перекодировки видео!» && exit 0 ' тем самым вырвался из цикла и вышел из сценария – repzero

+0

Благодарим за помощь! Я должен был быть более конкретным, это была моя вина. Я обновил вопрос. –

5

Вы можете «рекурсия», используя следующую строку:

exec bash "$0" "[email protected]" 

С $0 это путь к текущему сценарию, эта строка запускает скрипт без создания нового процесса, то есть вам не нужно беспокоиться о слишком большом количестве перезапусков, переполняющих таблицу процессов на вашем компьютере.

+1

Можете пройти через '' $ @ "', поэтому мы не теряем аргументы –

 Смежные вопросы

  • Нет связанных вопросов^_^