2

I'm trying to do something really simple: Give myself the ability to choose what to run on boot. This is on a Raspberry Pi so sometimes it will be headless, sometimes it won't. I thought a simple approach would just be to run a little script on boot (don't even know if this will work - haven't gotten that far yet) that either lets me mash the keyboard and start up the GUI or just time out and start a python script. But yeah, I'm failing at this simple task. The if statement always evaluates to true no matter what I try, and I've tried many, many things. Here is the iteration I want to use...

If I let it time out, the return value of the read command should be greater than 128. If I press something the return value should be zero. So...

#!/bin/bash

# this gives the user the chance to startx or leave it alone and let camera.py run
# we will give the user 5 seconds to make a choice

/bin/echo "Hit any key to startx, otherwise I will start camera.py."

if [[ "$(read -t 5 -n 1)" -eq 0 ]]; then
    /bin/echo "You want to startx!"
else
    /bin/echo "You want to start the python script!"
fi

The result I get is that it always evaluates to true. What am I doing wrong?

1 Answer 1

1

Replace:

if [[ "$(read -t 5 -n 1)" -eq 0 ]]; then

With:

if read -t 5 -n 1; then

If you type a character, read returns and exit code of zero (true). If read reaches end-of-file or it times out, it returns an exit code greater than zero (false). if responds to exit codes. There is no need for any test ([[) commands.

Sign up to request clarification or add additional context in comments.

1 Comment

Oh my goodness, thank you! I have to wait 8 minutes before I can hit the check mark, though.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.