Я думаю, что вы хотите иметь строку прогресса, которая постоянно обновляется без прокрутки, так что вот что я написал для этого:
files="$(ls /some/folder)"
elems="$(echo "$files" | wc -w)"
cnt=0
for name in $files; do
let "cnt+=1"
printf "\rMyScript - Processing file %3i of %3i: %.40s" "$cnt" "$elems" "$name"
done
echo
Это дает вам одну строку например MyScrpit — Обрабатывается файл 5 из 14: foo.a
.
Вы также можете изменить это для работы через канал, подобный dialog --progressbox
:
total="$1"
cnt=0
while IFS='$\n' read -r name; do
let "cnt+=1"
printf "\rProcessing file %3i of %3i: %.40s" "$cnt" "$total" "$name"
done < /dev/stdin
echo
Конечно, вы можете не указывать счетчик и просто печатать имена файлов (если вы не хотите предоставлять общее количество заранее в качестве параметра).
Фиксированная длина поля в printf гарантирует отсутствие переноса строк (если только окно терминала не станет еще меньше).
Для сценария оболочки на базе Linux вы можете попробовать запланировать сценарий, как показано ниже:
Запись Crontab:
*/5 * * * * sh /scripts/cups_recursive_checking.sh
#/bin/sh
HOST='server-name'
/etc/init.d/cups status>/scripts/cups.txt
if grep "cupsd (pid " /scripts/cups.txt
then
echo "cups is already running"
exit
else
/etc/init.d/cups restart
echo "cups just now started in server-name"
############# For mail Notification whenever cups gets restart follow below line according to your email ##########
mutt -e "my_hdr Content-Type: text/html" -e 'set realname=Notification' \
-e 'set from=notification@your-email.com' user@your-email.com \
-s "CUPS Notification" < /scripts/cups.txt
fi
###END OF THE SCRIPT###
Пример:Чтобы проверить принтеры после перезагрузки чашек в Linux
lpstat -a
clientPrinter accepting requests since Sat 13 Jul 2019 10:07:01 AM IST
dmx accepting requests since Sat 13 Jul 2019 03:55:05 PM IST
HP_LaserJet_400_M401dw accepting requests since Sat 13 Jul 2019 03:05:06 PM IST