Display runnning countdown in a bash script?


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Display runnning countdown in a bash script?
# 8  
Old 04-02-2009
Quote:
Originally Posted by pvdb
I'm assuming doing it does way minimizes the "skew" on the actual time spent in the function, ie. every cycle is as close to 1 second as possible, as opposed to 1 second + however long it takes to do all the work.

Is that correct, or is there another benefit in doing it this way?

That's exactly right.
# 9  
Old 04-02-2009
Hi Corona688,

Quote:
Originally Posted by Corona688
Great idea, thanks for the patch!
All good points you raise... here's a unified diff of the two scripts, which also addresses the issue you correctly point out with printf control characters in the prefix:

Code:
pvdb@localhost ~$ diff -U 3 original prefix 
--- original	2009-04-02 22:08:47.000000000 +0100
+++ prefix	2009-04-02 22:13:06.000000000 +0100
@@ -2,7 +2,9 @@
 {
         local OLD_IFS="${IFS}"
         IFS=":"
-        local ARR=( $1 )
+        local ARR=( $1 ) ; shift
+        IFS="${OLD_IFS}"
+        local PREFIX="$*" ; [ -n "${PREFIX}" ] && PREFIX="${PREFIX} > "
         local SECONDS=$((  (ARR[0] * 60 * 60) + (ARR[1] * 60) + ARR[2]  ))
         local START=$(date +%s)
         local END=$((START + SECONDS))
@@ -13,12 +15,11 @@
                 CUR=$(date +%s)
                 LEFT=$((END-CUR))
 
-                printf "\r%02d:%02d:%02d" \
-                        $((LEFT/3600)) $(( (LEFT/60)%60)) $((LEFT%60))
+                printf "\r%s%02d:%02d:%02d" \
+                        "${PREFIX}" $((LEFT/3600)) $(( (LEFT/60)%60)) $((LEFT%60))
 
                 sleep 1
         done
-        IFS="${OLD_IFS}"
         echo "        "
 }
 
pvdb@localhost ~/Desktop $ _

... as well as the patched script in its entirity:

Code:
function countdown
{
        local OLD_IFS="${IFS}"
        IFS=":"
        local ARR=( $1 ) ; shift
        IFS="${OLD_IFS}"
        local PREFIX="$*" ; [ -n "${PREFIX}" ] && PREFIX="${PREFIX} > "
        local SECONDS=$((  (ARR[0] * 60 * 60) + (ARR[1] * 60) + ARR[2]  ))
        local START=$(date +%s)
        local END=$((START + SECONDS))
        local CUR=$START

        while [[ $CUR -lt $END ]]
        do
                CUR=$(date +%s)
                LEFT=$((END-CUR))

                printf "\r%s%02d:%02d:%02d" \
                        "${PREFIX}" $((LEFT/3600)) $(( (LEFT/60)%60)) $((LEFT%60))

                sleep 1
        done
        echo "        "
}

Regards,

PVDB
# 10  
Old 04-02-2009

That still fails if the arg includes 08 or 09.
# 11  
Old 04-02-2009
Hi cfajohnson,

Quote:
Originally Posted by cfajohnson

That still fails if the arg includes 08 or 09.
Yes, absolutely agree, and your version of the script is definitely the way to go, but by posting my corrected patch, I was just finishing what I started, so to speak Smilie
# 12  
Old 04-02-2009

I should have added that yours is easily fixed:

Code:
local SECONDS=$(( ${ARR[0]#0} * 3600 + ${ARR[1]#0} * 60 + ${ARR[2]#0} ))

Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Perl script countdown

In the below bash when the perl is it possible to hide the commands from running on screen and display a process countdown? For example, on the cygwin screen now the user sees each process in the command running as running protocol refGene, running protocol popfreq_all, etc... Could a... (0 Replies)
Discussion started by: cmccabe
0 Replies

2. Shell Programming and Scripting

Bash script to display result in table

My script gives the following result. Is it possible to display the same in table format ? 1. rex_best Latest feeds are not avaialable. The last feed was generated on 2012-05-17 File Name = ekb_best_20120517_010949_665.tar.gz The Number of entry elements = 4209539 2. rex_genre Latest... (2 Replies)
Discussion started by: kishorekumar87
2 Replies

3. Shell Programming and Scripting

Bash - countdown timer

Hello, I have another problem with my script - I would like to have a countdown timer visible on the screen, and at the same time, I want te be able to do something else. And when the time runs out, I need to know about that inside the script somehow and do some action. I guess that would require 2... (3 Replies)
Discussion started by: xqwzts
3 Replies

4. Shell Programming and Scripting

How to refresh a graphical display through bash script

Hi folks , I need to display a message graphically using a messagebox or textbox through bash script. However the message should be keep changing every 4 secs . I input the message from a file and use "gxmessage" to display it . gxmessage -nofocus -center -title "Welcome screen" -geometry... (3 Replies)
Discussion started by: ddspark
3 Replies

5. Shell Programming and Scripting

Anyone know of any FUN countdown script

Hi all, Does anyone know of any FUN countdown script that I can use for my script? At the moment, am just using sleep 10 or more and then print stuff into the screen to allow more time for the user to decide whether they want to continue running the script or abort? Just thought of wanting... (3 Replies)
Discussion started by: newbie_01
3 Replies

6. Shell Programming and Scripting

bash script to display tail

Hi everyone, I'm trying to write a script to format a file using unix2dos. I want to output all but the first 14 lines in a file. Then I want to pipe this to unix2dos to convert the output to a file that's easily readable on windows. Here's what I have: export Lines=`wc -l < $1` export... (11 Replies)
Discussion started by: LuminalZero
11 Replies

7. Shell Programming and Scripting

Stop! (the countdown!) :-) shell script help

Hi guys, I've found two nifty little scripts on these forums one which detects if the F5 key has been pressed: #/bin/sh _key() { local kp ESC=$'\e' _KEY= read -d '' -sn1 _KEY case $_KEY in "$ESC") while read -d '' -sn1 -t1 kp do _KEY=$_KEY$kp ... (0 Replies)
Discussion started by: rich@ardz
0 Replies

8. Shell Programming and Scripting

runnning a shell script in multiple folders

Hey everyone, I'm fairly new to both unix and shell scripts. Right now I have a script that I can run in one folder (if a certain text file is there, do one thing, if it's not, do something else). I want to modify this to run in multiple directories. My setup is: a company directory, and within it... (2 Replies)
Discussion started by: melearlin
2 Replies

9. Shell Programming and Scripting

Bash Script to display directories in Path?

Hello there, As a newbie: The directories in PATH can be hard to distinguish when printed out as one line with colon .Please, can i have a sample script to display them,one to a line. Thank you. (1 Reply)
Discussion started by: debut
1 Replies

10. UNIX for Dummies Questions & Answers

shell script - loop to countdown

I am taking a class in UNIX and have written a script that needs to countdown from a number that is read in from the keyboard to zero. If no number is given the start of the countdown should default to 10. I can't get this to do the default #! /bin/sh echo Enter a number here to countdown... (2 Replies)
Discussion started by: froggwife
2 Replies
Login or Register to Ask a Question