Bash replacement to getchar

Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Bash replacement to getchar
# 1  
Old 08-13-2009
Bash replacement to getchar

There's a replacement in bash for getchar or get functions of C and C++?Those functions read the next char avaliable in the input stream.
I've tried something like:
OLD_STTY=`stty -g`
  stty cbreak -echo
  look=`dd if=/dev/tty bs=1 count=1 2>/dev/null`
  stty $OLD_STTY

But it is not working very well.
# 2  
Old 08-13-2009
Generic for all shells
read -n1 kbd

If you not echo then use stty -echo before read and stty echo after.

Also this "old standard" works:
echo -n "Press key:"
stty -echo raw
c=$(dd bs=1 count=1 2>/dev/null )
stty echo -raw
echo " key:$c"

Ofcourse you can save current stty and return it, but usually echo is on and raw is off.

Ksh include KEYBD interrupt = you can trap KEYBD.

trap 'keybd' KEYBD
while :
        read a

# 3  
Old 08-13-2009
echo -n "Press key:"
stty -echo raw
c=$(dd bs=1 count=1 2>/dev/null )
stty echo -raw
echo " key:$c"

It interpreters ctrl-c and ctrl-d literally... Is there a way to make it to be aborted by a signal?
# 4  
Old 08-14-2009
With this you can debug:
trap 'echo "int shell"' HUP INT QUIT
echo -n "Press key:"
stty -echo raw
c=$(dd bs=1 count=1 2>/dev/null )
stty echo -raw
echo "<$c>"
echo $c | od -c

echo "press ctrl-c"
sleep 20

result: dd read one char from stdin. Also ctrl-c and ctrl-d are only chars. So you can test those chars.

trap ':'  HUP INT QUIT
while [ "$c" = "" ]
  # do c read, look previous dd or
  echo -n "key:"
  read -n 1 c 
  # test it
  case "$c" in
    \001) ;; # ctrl-A
    \003) ;; # ctrl-C
  # remove char ascii 01-04
  c=$(echo "$c" | tr -d "[\001-\004]" )

Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

Awk/bash one liner replacement for a if condition

Hi. I wrote this small bash script, i want to compare second column from file1 with file2 if a pattern matches. Files are small and I am sure that pattern occurs only once. I think this can be rewritten into a awk one liner. Appreciate if someone could give me idea. Whole NR FNR confuse me :o ... (6 Replies)
Discussion started by: ctrld
6 Replies

2. Programming

Resample time series data with replacement any way to do this in awk or just bash script

I have some time series data that I need to resample or downsample at some specific time intervals. The firs column is time in decimal hours. I am tryiong to resample this data every 3 minutse. So I need a data value ever 0.05. Here is the example data and as you can see, there time slot for 0.1500... (3 Replies)
Discussion started by: malandisa
3 Replies

3. Programming

What is the difference between printf and putchar() or scanf and getchar() ?

Im a newbie to programming language, i found tat there r these function called printf and putchar() as well as scanf and getchar(), im curious abt why do dey hav these 2 different function although dey r doing the same instruction? :confused: (13 Replies)
Discussion started by: kris26
13 Replies

4. Programming

How to kill disowned process which calls getchar() in code

Hi, What happens to process state when getchar() is called? I wrote a C code in which I call getchar() somewhere down the road. I forgot about that, I started the process, put it in bg and disowned it using "disown". Now, how do I see where that process has gone/how do kill it? Thanks, Amrut (1 Reply)
Discussion started by: 17amrut29
1 Replies

5. UNIX for Dummies Questions & Answers


my filename.txt looks like this: 2079951061790 SCK0000891539000000000000021600R 2079951061790 SCK0000901487000000000000028900R 2079951061790 SCK0000903092000000000000021300R 2079951074758 ... (9 Replies)
Discussion started by: tjmannonline
9 Replies

6. Programming

Help on getchar

I wanted to make a simple program that writes chracters in a file but i didnt want to press enter .So i found the getchar which doesnt need enter.If i pass (int) getchar to putc ,in the file it shows a P character.The (int) getchar says it is equal to1734747216 so i do (int) getchar-1734747216... (4 Replies)
Discussion started by: fireblast
4 Replies

7. Programming

How to skip getchar in C?

Hi, I would like to read an input from keyboard using getchar. However, if no input (No Carriage return/new line none whatsoever) is given after say, 5 seconds, I would like to skip the getchar and move on. How do I do this in C. I'm using GNU compiler set. Thanks, (5 Replies)
Discussion started by: cprogdude
5 Replies

8. Shell Programming and Scripting

Bash string replacement - how to use regex?

Hello I have a bash script where I need to do a substring replacement like this: variable2=${variable1/foo/bar} However, I only want "foo" replaced if it is at the end of the line. However, this does not work: variable2=${variable1/foo$/bar} as you can see I'm using the $ regex for... (2 Replies)
Discussion started by: Ubuntu-UK
2 Replies

9. UNIX for Dummies Questions & Answers

Regarding Replacement

I have two files: file1: somedata <html> <head> This is sample statement ...... ...... </head> </html> somedata file2: olga 81 91 B A rene 82 92 B A zack 83 93 Expextd Result: (2 Replies)
Discussion started by: rajx
2 Replies

10. UNIX for Dummies Questions & Answers


hey everyone! got another problem here. how would i use the getchar() in a prompt: Press any key to continue the way i did it was to define a char variable named ch and then wrotechar ch ... ch = getchar(); printf("Press any key to continue"); getchar():if you press enter it exits, but... (2 Replies)
Discussion started by: primal
2 Replies
Login or Register to Ask a Question