키를 누를 때 파일을 그대로 인쇄

키를 누를 때 파일을 그대로 인쇄

Bash에서 다음 작업을 수행하고 싶습니다. 텍스트 파일이 있고 파일을 읽고, 키 입력을 기다리고, 올바른 버튼을 누를 때마다(한 단어 아래) 텍스트 파일을 인쇄하는 스크립트를 호출하고 싶습니다.

자세한 설명: 텍스트 파일이 다음과 같다고 가정해 보겠습니다.

This is my
text file

저는 이 키보드 버튼 그룹을 찾고 있습니다 [[:print:]]. 그래서 스크립트를 호출 ./script.sh textfile한 다음 "A"를 누르면 This나타나는데, 그런 다음 스페이스 버튼을 누르고 계속해서 This"O"를 입력하면 is나타납니다. 모든 내용이 나타날 때까지 "M"을 몇 번 더 누를 수 있습니다. 위의 단어가 모두 인쇄되고 끝났습니다.

내가 이미 가지고 있는 것:

나는 단일 키 누르기를 기다린 다음 그것이 유효할 때 뭔가를 수행하는 방법을 이미 알고 있습니다.

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

또한 파일을 그대로 읽는 방법도 알고 있습니다.파일을 그대로 읽기(나는 Lambert 사용자의 답변을 사용했습니다.) 하지만 둘의 조합이 내가 원하는 방식으로 작동하지 않는 것 같습니다. 

누구든지 이 작업을 수행하는 방법을 알고 있다면 감사하겠습니다. 또한 제가 질문한 내용 중 불분명하거나 잘못된 내용이 있거나, 잘못된 위치/방법으로 질문한 경우 지적해 주시기 바랍니다.

명확히 하기 위해 편집됨 텍스트 파일에는 원하는 수의 행이 포함될 수 있습니다. 키를 누를 때마다 다음 단어가 인쇄되어야 합니다.정확히cat텍스트 파일에서와 마찬가지로 공백과 개행 문자를 절약합니다( 전체 파일을 한 번에 인쇄하는 대신 키 입력 시에만 문자 그대로 인쇄하는 지연 스크립트로 구현하려는 스크립트를 생각해 보세요 ).

답변1

한 줄 파일의 경우 멀지 않습니다. 배열을 사용해 보고 구문 오류를 제거하세요.

read -a TMPARR < file
while read -n1 CH && [[ $CNT -lt ${#TMPARR[@]} ]]; do [[ "$CH" =~ [[:print:]] ]] && echo ${TMPARR[((CNT++))]}; done

여러 줄 파일의 경우 다음을 시도하십시오.

while read -a TMPARR <&3
   do   CNT=0
        [[ $CNT -lt ${#TMPARR[@]} ]] && read -sn1 CH
        while read -sn1 CH && [[ $CNT -lt ${#TMPARR[@]} ]]
          do [[ "$CH" =~ [[:print:]] ]] && echo ${TMPARR[((CNT++))]}
          done
   done  3< file

텍스트 줄을 순차적으로 읽고 터미널에서 병렬로 읽으려면 입력 파일 설명자를 분할해야 합니다.

관련 정보