echo without newline


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting echo without newline
# 1  
Old 09-19-2012
echo without newline

I am trying to make a download progress meter with bash and I need to echo a percentage without making a newline and without concatenating to the last output line.

The output should replace the last output line in the terminal.

This is something you see when wget or curl downloads files. That's what I am trying to do, but I don't know how.

Any pointers?
# 2  
Old 09-19-2012
for progress bar
try printf.
# 3  
Old 09-19-2012
You'll probably need echo -n ... in addition to this : Cursor Movement
# 4  
Old 09-19-2012
PS: echo is a buit-in for some shells that do not respect -n, so call the actual echo from whence/which it is found, or echo "....\c" works in ksh. Put a carriage return as first character and overwrite the line with enough characters to ensure all old data is gone. The cursor will rest to the right. You might want to pad a few spaces for added readability, as a blinking block cursor where you are focusing is just asking for an epileptic seizure. Smilie

printf can do a lot more than skipping the line feed, so that is a nice tool to adopt. It is a bit different, using it in shell not C/C++/JAVA, since without extra effort data are all character arrays.
# 5  
Old 09-19-2012
To use printf safely, do printf "%s" "mystring"

Since the first string is a format string, % characters in it will be interpreted as formatting specifiers. %s means 'string'. So %s by itself will print things as they're given without a newline.

If you'd just done printf "mystring" it might do strange things if mystring has a % in it anywhere.
This User Gave Thanks to Corona688 For This Post:
# 6  
Old 09-19-2012
How about this in bash:

Code:
#!/bin/bash
COLS=0
[ -t 1 ] && COLS=$(tput cols)
 
function show_pct
{
   pct=$1
   [ $COLS -lt 10 ] && return
 
   if [ $pct -lt 0 ]
   then
       printf "\r%-*s\r" $((COLS-2))
       return
   fi
 
   if [ $pct -eq 0 ]
   then
       fill=""
       printf -v rest "%-*s" $((COLS-10))
   else
     printf -v fill "%-*s" $((pct*(COLS-10)/100))
     printf -v rest "%-*s" $((COLS-10-(pct*(COLS-10)/100)))
   fi
   printf "\r%4d%% [%s%s]" $pct "${fill// /=}" "${rest// /.}"
}
 
for((val=0;val<101;val++)) {
    show_pct $val
    sleep 0.05
}
show_pct -1

---------- Post updated at 08:11 AM ---------- Previous update was at 07:51 AM ----------

Replace last line of function with
Code:
 printf "\r       %s%s]\r%4d%% [%s" "$fill"  "${rest// /.}" $pct "${fill// /=}" >&2

To output to stderr and leave cursor at % complete position, however this outputs nearly twice as many characters for each percentage.

It's also worth "remembering" the last percentage displayed and not outputting anything if the percentage is the same.

Last edited by Chubler_XL; 09-19-2012 at 07:17 PM..
# 7  
Old 09-20-2012
If you do not want to clutter logs, you can write such to the screen >/dev/tty even on systems lacking /dev/stderr.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

tcsh - understanding difference between "echo string" and "echo string > /dev/stdout"

I came across and unexpected behavior with redirections in tcsh. I know, csh is not best for redirections, but I'd like to understand what is happening here. I have following script (called out_to_streams.csh): #!/bin/tcsh -f echo Redirected to STDOUT > /dev/stdout echo Redirected to... (2 Replies)
Discussion started by: marcink
2 Replies

2. Shell Programming and Scripting

Echo to file using SH without adding newline character

Hello! I am able to do this in bash, using: echo -ne HELLO > file.txt and then, 'HELLO' is written into file.txt without the newline character to be added in the end of the file. How is this possible to be done using sh instead of bash? If I try something similar is SH, then inside... (3 Replies)
Discussion started by: hakermania
3 Replies

3. Shell Programming and Scripting

With that logic this echoes "echo". Question about echo!

echo `echo ` doesn't echoes anything. And it's logic. But echo `echo `echo ` ` does echoes "echo". What's the logic of it? the `echo `echo ` inside of the whole (first) echo, echoes nothing, so the first echo have to echo nothing but echoes "echo" (too much echoing :P):o (2 Replies)
Discussion started by: hakermania
2 Replies

4. UNIX for Dummies Questions & Answers

newline in echo

Hi all, I have a scripts in csh and whenI do echo command I want to add newline. I used to do it like this: #! /bin/csh echo "\n\n WHAT AREA DO YOU WANT:\n\n" echo -n " YOUR CHOISE : " set area=$< but since weupgrade the oracle to 10g it doesn't do the newline (he print the\n as a... (5 Replies)
Discussion started by: rikyer
5 Replies

5. UNIX for Dummies Questions & Answers

How to correctly use an echo inside an echo?

Bit of a weird one i suppose, i want to use an echo inside an echo... For example... i have a script that i want to use to take users input and create another script. Inside this script it creates it also needs to use echos... echo "echo "hello"" >$file echo "echo "goodbye"" >$file ... (3 Replies)
Discussion started by: mokachoka
3 Replies

6. Shell Programming and Scripting

Difference between using "echo" builtin and /bin/echo

So in my shell i execute: { while true; do echo string; sleep 1; done } | read line This waits one second and returns. But { while true; do /bin/echo string; sleep 1; done } | read line continues to run, and doesn't stop until i kill it explicitly. I have tried this in bash as well as zsh,... (2 Replies)
Discussion started by: ulidtko
2 Replies

7. UNIX for Dummies Questions & Answers

echo without newline character

hi, I have a for loop where in I write some file name to another file. I want to write all the filenames to another without any newlines. how can i avoid getting new lines with echo? Thanks, Srilaxmi (2 Replies)
Discussion started by: srilaxmi
2 Replies

8. UNIX for Dummies Questions & Answers

newline character

hi, I want to print the below lines "Message from bac logistics The Confirmation File has not been received." When i give like this in the code "Message from bac logistics\n The Confirmation File has not been received." It is giving only Message from bac logistics\n The... (9 Replies)
Discussion started by: trichyselva
9 Replies

9. Shell Programming and Scripting

replace a newline (\n)

dear all: maybe i have a file like : 12 34 56 78 end how do write can i replace newline into NA : make the file inte : 12 NA 34 NA 56 78 END (3 Replies)
Discussion started by: jeter
3 Replies

10. Forum Support Area for Unregistered Users & Account Problems

newline

I have an old file originally created in vi but read and saved by a word processor at some point. I have ^Ms and know how to substitute them for anything I wish but I still only have one long line when viewed in vi. So I suppose I need to substitute a newline for each ^M but I don't know the... (2 Replies)
Discussion started by: Gale Gorman
2 Replies
Login or Register to Ask a Question