Reputation: 7930
I want to read in bash when any key is pressed, be it arrow key, number, letter, or punctuation, without pressing enter.
This is the closest that I have come up with, besides that when an escaped key is pressed, it spills over into the next input. Also, escaped keys will read but not echo.
#!/bin/bash
read -r -n 1 -d $'\n' -p 'input> ' line
echo -en "\n"
echo "$line"
Upvotes: 1
Views: 829
Reputation: 20980
A bit hacky/dirty way, but should work for user interactive shells...
read -n1 -s -p 'input> ' line; read -t 0.1 -n2 -s line2
line="$line$line2"
Now, it's up to you to convert <ESC>[A
to string <UP>
or not.
NOTE: It would most likely fail, if the stdin is redirected (say, from pipe/file...)
Upvotes: 1