Jak uruchomić skrypt w ciągłej pętli

0

Nie rozumiem, jak ciągle uruchamiać ten skrypt. Służy do sprawdzania, czy rozmiar /var/spool/mailsię powiększa, i wyświetla wynik „Masz pocztę”.

Mogę go uruchomić, po prostu nie wiem, jak go uruchomić bez zatrzymywania się.

#!/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"
gitarzysta
źródło
Research Bash Loops - dla mnie wygląda na to, że próbujesz użyć fornieprawidłowo.
Ƭᴇcʜιᴇ007

Odpowiedzi:

0

Po zamknięciu okna terminala skrypt przestanie działać po upływie określonego czasu. With nohup .. a twój skrypt będzie działał, dopóki nie będzie gotowy. To powinno załatwić sprawę;

nohup yourscript.sh & 

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

zarvox
źródło
Chociaż może to być odpowiedź, której szukają, dobrą praktyką jest dostarczenie nieco więcej szczegółów do tego, co opublikowałeś dla innych czytelników. Spróbuj także cytować ważne fragmenty podanego linku.
Skórka Cheesa
0

Problem polega na tym, że po wejściu do pętli dwa rozmiary plików nie zmieniają się, więc albo natychmiast ją kończysz, albo zapętlasz w nieskończoność. Twój kod powinien być bardziej podobny (ostrzeżenie: niesprawdzone):

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"

(zastąpione forprzez bardziej zwykłe, whileale to nie był problem)

ksenoid
źródło