Refre sh только несколько строк на Bash Script - PullRequest
0 голосов
/ 14 февраля 2020

Итак, это мой вывод ...

00-
01-  Wallet : 123456789123465789 
02- 
03- --------------------
04- Server Stats Update:
05- --------------------
06-  Work Units : 0 (cancelled:0 | completed:0) 
07-  Average Complete Time : 0 
08- 
09- -------------
10- Stats Update:
11- -------------
12-  Work Units : 0 (ondemand:0 | precache:0 | paid:0) 
13-  Prize Pool : 0%    -    Earned : 0 
14- 

Мне нужно, чтобы строки 06,07,12 и 13 продолжали обновляться ... единственный метод, который я нашел до сих пор, это сделать al oop и очищать вывод каждые две секунды ...

Также я обнаружил, что printf \033[A может быть полезным, но я не мог понять, как это реализовать здесь ...

Мой код. ..

while true: do
  echo -e "\n Wallet : ${Address} \n"
  echo --------------------
  echo Server Stats Update:
  echo --------------------
  echo -e " Work Units : ${ServerOverallWU} (cancelled:${Cancelled} | completed:${Completed}) "
  echo -e " Average Complete Time : ${AvgCompTime} "
  echo
  echo -------------
  echo Stats Update:
  echo -------------
  echo -e " Work Units : ${SaveOverallWU} (ondemand:${SaveOnDemand} | precache:${SavePreCache} | paid:${SavePaidWU}) "
  echo -en " Prize Pool : ${SavePrizePool}%   -    Earned : ${SaveEarned} "
done

Ps: исправлено ... просто поставьте клир на правильный упор, и теперь он работает гладко, как масло

Ответы [ 2 ]

1 голос
/ 14 февраля 2020

Если вы хотите полностью контролировать свой экран, вы, вероятно, можете clear его в начале скрипта, а затем использовать прямую адресацию курсора, чтобы перекрашивать только части экрана (т.е. переместить курсор в положение 1,13; перекрасить) эту строку, чтобы заменить ее, затем перейдите к строке 15 и перекрасьте ее), но в чистом Bash это будет довольно уродливо и мучительно. Возможно, вам следует использовать оболочку curses, например whiptail, чтобы защитить вас от деталей. Может быть, см. Также https://unix.stackexchange.com/questions/155417/a-set-of-libraries-like-ncurses-in-a-shell-script

0 голосов
/ 14 февраля 2020

У меня есть функция для этого

XY () { printf "\e[$2;${1}H$3"; }

Использование

XY 1 13 "Hello World!"

Будет напечатано «Hello World!» в столбце 1 строки 13. Сравнивая это с tput

for i in {1..100}; {
    tput cup $1 $2; printf "Hello World!"
}

real    0m0,130s
user    0m0,079s
sys     0m0,055s


for i in {1..100}; {
    XY $1 2 "Hello World!"
}

real    0m0,002s
user    0m0,002s
sys     0m0,000s
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...