Skip to main content
Markup.
Source Link
Kusalananda
  • 355.8k
  • 42
  • 735
  • 1.1k

I want to do the following in bash: I have a textfile, and want to call a script that reads the file, waits for keystrokes from me and each time a correct button is pressed, it prints exactly one word (the next word) from the textfile.

To elaborate: Let's just say the textfile looks like the following

This is my text file

This is my
text file

and I am looking for keyboard buttons of the group [[:print:]][[:print:]]. So I call my script like ./script.sh textfile, then I press "A" and the This appears, then I press the Space button, still only the This , then I type "O" and the is appears, I press maybe "M" a few more times, until all of the text above is printed, and I'm done.

What I already have:

I already know how to wait for a single keypress and then do something if it works:

while true; do read -rsn1 input if [[ "$input" =~ "[[:print]]" ]]; then   # do stuff on keypress fi done

while true; do
  read -rsn1 input
    if [[ "$input" =~ "[[:print]]" ]]; then
     # do stuff on keypress
    fi
done

I also know how to read a file word by word: Read File word by word (I used answer of user Lambert)  The combination of the two does not seem to work how I want it though.

If anyone has any idea on how to do this, I'd greatly appreciate it. Also, please remark if I did formulate anything unclear/wrong or if I asked in the wrong place/manner.

Edit for clarification The Textfile may contain an arbitrary number of lines. Each keypress should print words exactly like it stands in the Textfile, i.e. it conserves spaces and newlines (think of the script I want to achieve as a delayed cat that prints not the whole file at once, but only Word by Word on keystroke)

I want to do the following in bash: I have a textfile, and want to call a script that reads the file, waits for keystrokes from me and each time a correct button is pressed, it prints exactly one word (the next word) from the textfile.

To elaborate: Let's just say the textfile looks like the following

This is my text file

and I am looking for keyboard buttons of the group [[:print:]]. So I call my script like ./script.sh textfile, then I press "A" and the This appears, then I press the Space button, still only the This , then I type "O" and the is appears, I press maybe "M" a few more times, until all of the text above is printed, and I'm done.

What I already have:

I already know how to wait for a single keypress and then do something if it works:

while true; do read -rsn1 input if [[ "$input" =~ "[[:print]]" ]]; then   # do stuff on keypress fi done

I also know how to read a file word by word: Read File word by word (I used answer of user Lambert)  The combination of the two does not seem to work how I want it though.

If anyone has any idea on how to do this, I'd greatly appreciate it. Also, please remark if I did formulate anything unclear/wrong or if I asked in the wrong place/manner.

Edit for clarification The Textfile may contain an arbitrary number of lines. Each keypress should print words exactly like it stands in the Textfile, i.e. it conserves spaces and newlines (think of the script I want to achieve as a delayed cat that prints not the whole file at once, but only Word by Word on keystroke)

I want to do the following in bash: I have a textfile, and want to call a script that reads the file, waits for keystrokes from me and each time a correct button is pressed, it prints exactly one word (the next word) from the textfile.

To elaborate: Let's just say the textfile looks like the following

This is my
text file

and I am looking for keyboard buttons of the group [[:print:]]. So I call my script like ./script.sh textfile, then I press "A" and the This appears, then I press the Space button, still only the This , then I type "O" and the is appears, I press maybe "M" a few more times, until all of the text above is printed, and I'm done.

What I already have:

I already know how to wait for a single keypress and then do something if it works:

while true; do
  read -rsn1 input
    if [[ "$input" =~ "[[:print]]" ]]; then
     # do stuff on keypress
    fi
done

I also know how to read a file word by word: Read File word by word (I used answer of user Lambert)  The combination of the two does not seem to work how I want it though.

If anyone has any idea on how to do this, I'd greatly appreciate it. Also, please remark if I did formulate anything unclear/wrong or if I asked in the wrong place/manner.

Edit for clarification The Textfile may contain an arbitrary number of lines. Each keypress should print words exactly like it stands in the Textfile, i.e. it conserves spaces and newlines (think of the script I want to achieve as a delayed cat that prints not the whole file at once, but only Word by Word on keystroke)

added 330 characters in body
Source Link

I want to do the following in bash: I have a textfile, and want to call a script that reads the file, waits for keystrokes from me and each time a correct button is pressed, it prints exactly one word (the next word) from the textfile.

To elaborate: Let's just say the textfile looks like the following

This is my text file

and I am looking for keyboard buttons of the group [[:print:]]. So I call my script like ./script.sh textfile, then I press "A" and the This appears, then I press the Space button, still only the This , then I type "O" and the is appears, I press maybe "M" a few more times, until all of the text above is printed, and I'm done.

What I already have:

I already know how to wait for a single keypress and then do something if it works:

while true; do read -rsn1 input if [[ "$input" =~ "[[:print]]" ]]; then   # do stuff on keypress fi done

I also know how to read a file word by word: Read File word by word (I used answer of user Lambert)  The combination of the two does not seem to work how I want it though.

If anyone has any idea on how to do this, I'd greatly appreciate it. Also, please remark if I did formulate anything unclear/wrong or if I asked in the wrong place/manner.

Edit for clarification The Textfile may contain an arbitrary number of lines. Each keypress should print words exactly like it stands in the Textfile, i.e. it conserves spaces and newlines (think of the script I want to achieve as a delayed cat that prints not the whole file at once, but only Word by Word on keystroke)

I want to do the following in bash: I have a textfile, and want to call a script that reads the file, waits for keystrokes from me and each time a correct button is pressed, it prints exactly one word (the next word) from the textfile.

To elaborate: Let's just say the textfile looks like the following

This is my text file

and I am looking for keyboard buttons of the group [[:print:]]. So I call my script like ./script.sh textfile, then I press "A" and the This appears, then I press the Space button, still only the This , then I type "O" and the is appears, I press maybe "M" a few more times, until all of the text above is printed, and I'm done.

What I already have:

I already know how to wait for a single keypress and then do something if it works:

while true; do read -rsn1 input if [[ "$input" =~ "[[:print]]" ]]; then   # do stuff on keypress fi done

I also know how to read a file word by word: Read File word by word (I used answer of user Lambert)  The combination of the two does not seem to work how I want it though.

If anyone has any idea on how to do this, I'd greatly appreciate it. Also, please remark if I did formulate anything unclear/wrong or if I asked in the wrong place/manner.

I want to do the following in bash: I have a textfile, and want to call a script that reads the file, waits for keystrokes from me and each time a correct button is pressed, it prints exactly one word (the next word) from the textfile.

To elaborate: Let's just say the textfile looks like the following

This is my text file

and I am looking for keyboard buttons of the group [[:print:]]. So I call my script like ./script.sh textfile, then I press "A" and the This appears, then I press the Space button, still only the This , then I type "O" and the is appears, I press maybe "M" a few more times, until all of the text above is printed, and I'm done.

What I already have:

I already know how to wait for a single keypress and then do something if it works:

while true; do read -rsn1 input if [[ "$input" =~ "[[:print]]" ]]; then   # do stuff on keypress fi done

I also know how to read a file word by word: Read File word by word (I used answer of user Lambert)  The combination of the two does not seem to work how I want it though.

If anyone has any idea on how to do this, I'd greatly appreciate it. Also, please remark if I did formulate anything unclear/wrong or if I asked in the wrong place/manner.

Edit for clarification The Textfile may contain an arbitrary number of lines. Each keypress should print words exactly like it stands in the Textfile, i.e. it conserves spaces and newlines (think of the script I want to achieve as a delayed cat that prints not the whole file at once, but only Word by Word on keystroke)

Source Link

Print file Word for Word on keypress

I want to do the following in bash: I have a textfile, and want to call a script that reads the file, waits for keystrokes from me and each time a correct button is pressed, it prints exactly one word (the next word) from the textfile.

To elaborate: Let's just say the textfile looks like the following

This is my text file

and I am looking for keyboard buttons of the group [[:print:]]. So I call my script like ./script.sh textfile, then I press "A" and the This appears, then I press the Space button, still only the This , then I type "O" and the is appears, I press maybe "M" a few more times, until all of the text above is printed, and I'm done.

What I already have:

I already know how to wait for a single keypress and then do something if it works:

while true; do read -rsn1 input if [[ "$input" =~ "[[:print]]" ]]; then   # do stuff on keypress fi done

I also know how to read a file word by word: Read File word by word (I used answer of user Lambert)  The combination of the two does not seem to work how I want it though.

If anyone has any idea on how to do this, I'd greatly appreciate it. Also, please remark if I did formulate anything unclear/wrong or if I asked in the wrong place/manner.