Timer läuft unter Bash-Skript im Dialogfenster

1922
maihabunash

Das folgende Bash-Skript ist ein Beispiel für die Verwendung des Befehls dialog. Dieses Skript führt eine Statusleiste aus (und zeigt die Prozessaktualisierung an). Was im Dialog fehlt, ist eine Zeitschaltuhr, die angibt, wie lange der Fortschrittsbalken jede Sekunde bis zum Ende läuft.

Ich bin nicht sicher, ob der Dialog dies ermöglicht, also frage ich, ob es möglich ist, die Uhr innerhalb des Dialogfensters zu drucken.

Wenn nicht, was sind andere Alternativen? (zB eine Uhr, die außerhalb des Dialogfensters läuft)

 #!/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=$ ( # infinite while loop while : do cat <<EOF XXX $counter $counter% upgraded  $COMMAND XXX EOF COMMAND="cp $ $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 

UPDATE: Ich habe auch einen Timercode gefunden und möchte diesen Code in der Dialogzeile kombinieren. Wie mache ich das?

Das Timer-Skript (Code):

 date1=` date +%s`;  while true; do  echo -ne "$(date -u --date @$((`date +%s` - $date1)) +%H:%M:%S)\r";  done 
2
Ich glaube nicht, dass ein Countdown-Timer möglich ist, da das System, auf dem dieser läuft, wahrscheinlich nicht deterministisch ist ... Jan vor 9 Jahren 0

1 Antwort auf die Frage

1
lemonsqueeze

In der Tat wäre es schön, wenn Dialog eine --show-elapsedOption oder etwas hätte, es ist derzeit nicht einfach, dies zu tun.

Der Anzeigeteil ist nicht zu hart: Sie können (ab) die --titleOption verwenden, um die abgelaufene Zeit anzuzeigen. Sie können es sogar dazu bringen, unterhalb der Anzeige anzuzeigen, indem Sie mehr hinzufügen \n(und die Boxgröße ändern).

enter image description here

Schwieriger ist es, es jede Sekunde anzeigen zu lassen, auch wenn zwischen den Statusaktualisierungen 50 Sekunden liegen. Hier ist eine Lösung mit read -tTimeout-Option:

#!/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