![사용자 입력 후 텍스트가 사라지도록 만들기](https://linux55.com/image/115931/%EC%82%AC%EC%9A%A9%EC%9E%90%20%EC%9E%85%EB%A0%A5%20%ED%9B%84%20%ED%85%8D%EC%8A%A4%ED%8A%B8%EA%B0%80%20%EC%82%AC%EB%9D%BC%EC%A7%80%EB%8F%84%EB%A1%9D%20%EB%A7%8C%EB%93%A4%EA%B8%B0.png)
사용자가 콘텐츠를 입력하자마자 표시된 콘텐츠를 사라지게 하는 방법이 있나요?
예를 들어 다음 파일을 사용하세요.
#!/bin/bash
read -n 1 -p 'how are you ? ' var
if [ "$var" == "y" ]
then
echo 'Have fun'
else
echo 'Go to Doctor'
fi
이것을 실행하면 출력은 다음과 같습니다.
how are you ? yHave fun
how are you ?
사용자가 키를 누르자마자 사라질 수 있는 것을 찾고 있습니다.
그런 다음 사라진 후 인쇄하십시오.Have fun
그래서 나는 위 프로그램의 최종 출력이 다음과 같기를 원합니다.
Have fun
참고: 또한 쉘 화면에 인쇄된 이 스크립트 위에 있는 내용은 삭제하면 안 됩니다.
나는 사용하고있다bash
답변1
캐리지 리턴( \r
)을 사용하세요. 이 특수 문자(기계식 타자기 시절의 문자)는 커서를 줄의 시작 부분으로 다시 이동시킵니다. 그런 다음 삭제하려는 메시지만큼 많은 공백이 필요하고(이렇게 하면 메시지가 덮어쓰여집니다) 다음 메시지를 인쇄하기 전에 두 번째 캐리지 리턴을 사용하여 처음으로 돌아갑니다. 이 같은:
#!/bin/bash
echo foo
read -n 1 -p 'how are you ? ' var
if [ "$var" == "y" ]
then
printf '\r \rHave fun\n'
else
printf '\r \rGo to Doctor\n'
fi
위 스크립트를 실행하면 다음이 인쇄됩니다.
$ foo.sh
foo
Have fun
답변2
당신은 그것을 사용할 수 있습니다 :
tput cr
(또는 printf '\r'
) 커서를 줄의 시작 부분으로 이동합니다. 다음은:
tput el
줄 끝까지 모두 삭제합니다. ( tcsh
그리고 동등한 기능과 함께 사용할 수 있는 내장 함수 zsh
도 있습니다 : (또한 ) )echotc
termcap
terminfo
el
echotc ce
echoti el
zsh
답변3
이를 수행하는 방법은 바보 방지부터 우아한 것까지 다양합니다.
(가장 힘들긴 하지만) 가장 확실한 방법은 백스페이스, 스페이스, 백스페이스를 누르고 여러 번 반복하는 것입니다. 이 방법은 텔레타이프라이터를 제외한 모든 장치에서 작동합니다(종이에서 잉크를 제거하는 것은 어려운 일입니다).
다음 비율은 캐리지 리턴 공간과 캐리지 리턴입니다. 이것은 각 캐리지 리턴 앞이나 뒤에 줄 바꿈을 삽입하는 터미널 에뮬레이터에서는 작동하지 않습니다(이것은 minicom에 대한 옵션이며 다른 장치에서는 이를 갖도록 구성될 수 있습니다).
그런 다음 터미널별 트릭이 있습니다. termcap 및 terminfo 데이터베이스가 사용법을 표시할 수 있으므로 termcap 기능 코드만 언급하겠습니다.(목록입니다.)
단일 행의 경우 간단합니다. 열(ch)로 이동하고 행 끝(ce)까지 지우면 됩니다.
여러 줄 응답을 포함한 더 복잡한 경우에는 절대 위치 저장(sc), 프롬프트, 응답 읽기, 커서 위치 복원(rc), 화면 끝까지 지우기(cd)가 있습니다.
대부분의 경우 대부분의 터미널 에뮬레이터가 호환되므로 마지막 두 답변의 vt100 값을 하드코딩할 수 있습니다. 물론 모든 터미널이 이러한 옵션을 지원하는 것은 아니지만 지원하는 터미널은 드물고 쓸모가 없습니다.