Как запустить скрипт в непрерывном цикле

0

Я не понимаю, как запустить этот скрипт постоянно. Он используется для проверки увеличения размера /var/spool/mailи отображает вывод «У вас есть почта».

Я могу заставить его работать, я просто не знаю, как заставить его работать без остановки.

#!/bin/bash
filename=/var/spool/mail/will
filesize="$(du -b "$filename")"
filesizeold="${filesize//[!0-9]/}"
echo $filesizeold
sleep 10;
filename=/var/spool/mail/will
filesize="$(du -b "$filename")"
filesizenew="${filesize//[!0-9]/}"
echo $filesizenew
for (( ;; ))  
do
if [ $filesizeold -ne $filesizenew ];
then
break
fi
done
echo "$USER, You have mail"
Гитарист
источник
Исследуйте Bash Loops - мне кажется, вы пытаетесь использовать forнеправильно.
Ƭᴇcʜιᴇ007

Ответы:

0

Когда вы закрываете окно терминала, ваш скрипт останавливается после истечения времени ожидания. С nohup .. & ваш скрипт будет работать, пока он не будет готов. Это должно сработать;

nohup yourscript.sh & 

https://en.wikipedia.org/wiki/Nohup

zarvox
источник
Хотя это может быть ответом, который они ищут, хорошей практикой является предоставление чуть более подробной информации о том, что вы разместили для других читателей. Кроме того, попытайтесь заблокировать цитаты важных битов ссылки, которую вы предоставили.
Cheesus Crust
0

Проблема в том, что как только вы входите в цикл, два размера файлов не меняются, поэтому вы либо выходите из цикла немедленно, либо выполняете цикл бесконечно. Ваш код должен быть больше похож (предупреждение: не проверено):

filename=/var/spool/mail/$USER
filesizeold=$(du -b "$filename")
echo "Filesizeold: $filesizeold"
while true
do
    filesizenew=$(du -b "$filename")
    echo "Filesizenew: $filesizenew"
    if [ $filesizeold -ne $filesizenew ];
    then
        break
    fi
    echo "Still same size, sleeping and looping"
    sleep 10
done
echo "$USER, You have mail"

(заменил forна более обычный, whileно это не проблема)

xenoid
источник