2

I need to write a script that will add a line to a text file if Enter is pressed.

But, if Ctrl+D is pressed, I need to exit that loop in the bash.

touch texttest.txt
LINE="0"
while true; do
    read LINE;
    if [ "$LINE" == "^D" ]; then
            break
    else
            echo "$LINE" >> texttest.txt
    fi
done

Currently have something like this but cannot figure out how I am do exit the while loop when Ctrl+D is pressed instead of Enter.

5

You're overthinking it. All you need is this:

cat > texttest.txt

Cat will read from STDIN if you've not told it different. Since it's reading from STDIN, it will react to the control character Ctrl+D without your having to specify it. And since Ctrl+D is the only thing that will finish the cat subprocess, you don't even need to wrap it in a loop.

3

The following would do:

while read -r LINE ; do
  echo "$LINE" >> texttest.txt
done
  1. you don't need to touch the file first
  2. you don't need to initialize the LINE variable
  3. Ctrl+D closes stdin, which makes read exit with non-null (false) exit code
  • whoever edited my answer, I disagree. – artm Oct 13 '14 at 6:36

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.