Bash INKEY$ function...


 
Thread Tools Search this Thread
Top Forums UNIX for Dummies Questions & Answers Bash INKEY$ function...
# 1  
Old 03-25-2013
Bash INKEY$ function...

This is probably common knowledge to the professionals but not so much for amateurs like
myself.

This is a code snippet for the equivalent of BASIC's...

LET char$=INKEY$

As the timeout parameter cannot be less than 1 second then this is the only limitation...

It is a single line function which has a variable "char"...

Read the code for more information...

Issued as Public Domain...

Code:
#!/bin/bash

# An INKEY$ function for bash!
inkey() { char="" ; read -p "" -n1 -s -t1 char ; }
# Similar to BASIC's LET char$=INKEY$

# Do you remember INKEY$ in BASIC programming?
# Example:-
#
# PRINT "Some prompt:- "
# some_label:
# LET char$=INKEY$
# IF char$="<some_character>" THEN <do_something>
# IF char$="" THEN <do_something_else>
# GOTO some_label

# This is just a test piece only...
while true
do
	printf "Some prompt:- "
	# This is LET char$=INKEY$...
	inkey
	printf "Key pressed:- '$char'...\n"
	if [ "$char" == "q" ]
	then
		printf "Quitting... \n"
		break
	fi
	if [ "$char" == "" ]
	then
		printf "Timeout works OK...\n"
	fi
	if [ "$char" == "b" ]
	then
		printf "Barry Walker...\n"
	fi
done

# 2  
Old 03-25-2013
What read -n 1 is doing here is probably something like stty -icanon min 1 ; get_character ; reset

...since it's not BASH that's preventing you from reading one at a time, but the terminal itself. Usually it's in "canon" mode, or line-by-line.
# 3  
Old 03-26-2013
Hi Corona688...

Thanks for the info...
One day I will become a coder... ;o)

I have used a derivative of it in the next stage of the AudioScope as a pseudo vertical shift control, so I thought I would let other people like me have it...
# 4  
Old 03-26-2013
What's wrong with
Code:
stty raw -echo
inkey=`dd bs=1 count=1 2>/dev/null`
stty -raw echo

...that someone excellently posted a while back. This can be tweaked for particular shell, but doesn't rely on the shell's inbuilt functions and is less susceptible to the variations across OS flavours.


Bring back the ZX-Spectrum (Ran out of colours!)


Robin
# 5  
Old 03-26-2013
For one thing, it assumes that a keystroke is one character(frequently untrue).

For another, it runs stty twice per keystroke... I'd be tempted to leave the terminal as is instead of changing it that often, save you a lot of CPU time.

This should work work:

Code:
stty -icanon min 0 time 1

key=`dd count=1 2>/dev/null`

...

It should be able to read entire keystrokes at once.
# 6  
Old 03-26-2013
Hi rbatte1...

Quote:
Originally Posted by rbatte1
What's wrong with
Code:
stty raw -echo
inkey=`dd bs=1 count=1 2>/dev/null`
stty -raw echo

It is NOT a callable one liner function?

;o)

Thanks to Corona688 and his knowledge...

Here we go a single line function:-

Code:
#!/bin/bash

inkey() { char="" ; stty -icanon min 0 time 1 ; char=`dd count=1 2>/dev/null` ; }

while true
do
	printf "Some prompt:- "
	# This is LET char$=INKEY$...
	inkey
	printf "Key pressed:- '$char'...\n"
	if [ "$char" == "q" ]
	then
		printf "Quitting... \n"
		break
	fi
	if [ "$char" == "" ]
	then
		printf "Timeout works OK...\n"
	fi
	if [ "$char" == "b" ]
	then
		printf "Barry Walker...\n"
	fi
done

Bazza...

Last edited by wisecracker; 03-26-2013 at 03:05 PM..
 
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Bash function problem

I am trying to figure out why I am having a "problem" with some functions in a bash script I am running. The reason for air quoting is that the functions are working, they are just not displaying anything to screen when called from another function. Here's an example: function Create_Input {... (6 Replies)
Discussion started by: dagamier
6 Replies

2. Shell Programming and Scripting

Bash function, for BSD

I am putting this thread to shell-threads, because it is about how to make a function work properly. I need a hint for declaring a function right, it has been more than a year I did not work that straight with bash. So my aim is to turn off the eth0 (as it would be in linux, and bge0 in bsd ),... (2 Replies)
Discussion started by: 1in10
2 Replies

3. Shell Programming and Scripting

Yes or No selection within bash function

I need to add a selection within the bash function below and am having some trouble doing so. phox2b() { printf "\n\n" printf "What is the id of the patient getting Phox2B analysis : "; read id printf "Is this an intronic variant? Y/N "; read match_choice case... (5 Replies)
Discussion started by: cmccabe
5 Replies

4. Shell Programming and Scripting

Bash function

startvm() { startguest } Is there a way use one line to get this ? actually I want startvm=startguest (5 Replies)
Discussion started by: yanglei_fage
5 Replies

5. Shell Programming and Scripting

BASH function error

Hey everyone. I am currently testing my first function based BASH script. The ultimate goal is going to be moving logs from point A to point B (or if B is down, to point C). Part of this involves the following function: function testAlive{ ping -c 1 -q $1 } Now when I run ping -c... (1 Reply)
Discussion started by: msarro
1 Replies

6. Shell Programming and Scripting

In bash getting weird output from function ?

My script- result="" times() { echo "inside the times function" result=8 echo "Inside function $result" return $result } result=$(times) echo "the value is "$? echo "the value of result $result" when I run I get this, why the value still remain 0. $ ./func the value is 0 the value... (5 Replies)
Discussion started by: boy18nj
5 Replies

7. Shell Programming and Scripting

[Bash]Function returning a boolean

Hello all, I would like to know if it is possible to return a the result of a boolean expression from a function like this function() { # some code return || } and what will be the return value ? Thank you for help. (6 Replies)
Discussion started by: dolphin06
6 Replies

8. Shell Programming and Scripting

bash search function

I want to have a function with a similar interface: search *.cpp asdf that will search recursively all directories for *.cpp file, containing line 'asdf' inside. I tried this: function search { find . -name "$1" | xargs grep -li $2; } But it doesn't work all the time. For example, if i run it... (3 Replies)
Discussion started by: doze
3 Replies

9. Shell Programming and Scripting

Need help in using power function in Bash

Hi, I would like to use a power function in Bash in an awk '{ } . e.g pow(2,3)=8 Any suggestion? I try to find online resources but most of them stated by using BC. Please advise. Thanks. (3 Replies)
Discussion started by: ahjiefreak
3 Replies

10. Shell Programming and Scripting

Need assistance with bash function

Hi all! I need a little help with an imbedded fuction I am trying to write. What I am trying to do is go to a series of hosts and get the contents of an XML file, storing some of the data, along with the name of the host it was gathered from. My intent is to store this in an array for later... (1 Reply)
Discussion started by: _jade_
1 Replies
Login or Register to Ask a Question