Таймер работает под скриптом bash в диалоговом окне

следующий сценарий bash является примером использования команды dialog. Этот сценарий запускает индикатор выполнения (и отображает обновление процесса). В диалоговом окне отсутствует времени - это показывает, сколько времени индикатор был запущен, каждую секунду, до конца.

Я не уверен, что диалог позволяет это, поэтому я спрашиваю, Можно ли печатать часы внутри диалогового окна?

Если нет, то какие другие альтернативы? (для например, часы, которые запускаются вне диалогового окна)

  #!/bin/bash
  declare PACKAGES=("/etc/crontab"  "/etc/dmtab"  "/etc/fstab"  "/etc/inittab"  "/etc/mtab")
     NUM_PACKAGES=${#PACKAGES[*]} # no. of packages to update (#packages in the array $PACKAGES)
  step=$((100/$NUM_PACKAGES))  # progress bar step
   cur_file_idx=0
   counter=0
 DEST=${HOME}
    (
    # infinite while loop
    while :
  do
  cat <<EOF
  XXX
 $counter
   $counter% upgraded

   $COMMAND
   XXX
   EOF
       COMMAND="cp ${PACKAGES[$cur_file_idx]} $DEST &>/dev/null" # sets/updates command to exec.
      [[ $NUM_PACKAGES -lt $cur_file_idx ]] && $COMMAND # executes command

   (( cur_file_idx+=1 )) # increase counter
     (( counter+=step ))
   [ $counter -gt 100 ] && break  # break when reach the 100% (or greater
                               # since Bash only does integer arithmetic)
   sleep 10 # delay it a specified amount of time i.e. 1 sec
 done
     ) |
      dialog --title "File upgrade" --gauge "Please wait..." 10 70 0

обновление: Я также нашел код таймера, и я хочу объединить этот код в диалоговой строке-как это сделать?

скрипт таймера (код) :

 date1=`  date   +%s`; 
   while true; do 
   echo -ne "$(date -u --date @$((`date +%s` - $date1)) +%H:%M:%S)r"; 
   done
10
задан Doktoro Reichard
25.01.2023 15:46 Количество просмотров материала 3448
Распечатать страницу

1 ответ

действительно, было бы неплохо, если бы диалог был --show-elapsed option или что-то еще, в настоящее время это не просто сделать.

дисплей часть не слишком трудно: вы можете (ab) использовать --title возможность отображения затраченного времени. Вы даже можете заставить его отображаться ниже датчика, добавив больше \n (и изменение размера коробки).

enter image description here

сложнее заставить его отображать каждую секунду, даже если между обновлениями статуса 50s. Вот решение с помощью read -t тайм-аут вариант:

#!/bin/bash

show_dialog()
{
    p=0             # percentage
    date1=`date +%s`
    while [ "$p" != 100 ]; do
        read -t 1 tmp && p=$tmp
        elapsed="$(date -u --date @$((`date +%s` - $date1)) +%H:%M:%S)"
        echo $p | dialog --title "File upgrade" --gauge "Please wait...\n\n\n\n$elapsed" 10 70 0
    done
}

task()              # fake task
{ for p in `seq 1 100`; do echo $p; sleep 2; done; }

task | show_dialog
1
отвечен lemonsqueeze 2023-01-26 23:34

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх