9

I know this question has been already asked & answered, but the solution I found listens for space and enter:

while [ "$key" != '' ]; do read -n1 -s -r key done 

Is there a way (in bash) to make a script that will wait only for the space bar?

1
  • what should it do when the users hits some other key? (not if, when.) Commented Oct 18, 2020 at 15:41

1 Answer 1

21

I suggest to use only read -d ' ' key.

-d delim: continue until the first character of DELIM is read, rather than newline


See: help read

3
  • 1
    Wow! Thank you. This is what I was looking for. @OskarSkog If you mean if it'll show what you're typing, then yes, this will show the keys you're pressing in the terminal, but you can disable it by adding -s flag, like read -s -d ' ' (you don't need the key variable here, if you only want it to wait for the space key) Commented Oct 17, 2020 at 7:54
  • @adazem009 No, I was asking about buffering not echoing. The man page for bash's read doesn't clearly mention it but it obviously works without waiting for a line feed. Commented Oct 17, 2020 at 9:28
  • 1
    @adazem009 On the negative side of things, read is painfully inefficient: it makes a system call for each character it reads (which is kind of why it can do this trick of reading a space without needing Enter). For more reasons to avoid using read unless you have no other option, please see Stéphane's excellent answer here: unix.stackexchange.com/q/169716/88378 Commented Oct 18, 2020 at 14:39

You must log in to answer this question.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.