사용자 입력 후 텍스트가 사라지도록 설정


9

사용자가 입력 한 직후에 표시된 컨텐츠를 사라지게 할 수있는 방법이 있습니까?

예를 들어 아래에서이 파일을 가져 오십시오.

#!/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


2
옵션이 아닌 clear사이에 사용 echo합니까?
sebasth

1
아니요, clear화면에 이미 인쇄 된 출력물이 있으면 지 웁니다. @sebasth
집시 우주 비행사

어디 Are you fine에서 왔습니까? 그렇지 How are you않습니까?
Barmar

@Barmar 네, 죄송합니다. 실수로 수정했습니다.
GypsyCosmonaut

답변:


12

당신이 사용할 수있는:

tput cr

(또는 printf '\r')를 눌러 커서를 줄의 시작 부분으로 이동하십시오. 뒤에 :

tput el

줄 끝까지 모든 것을 삭제합니다. ( tcsh그리고 zsh또한이 echotc사용자가 함께 사용할 수있는 내장 termcap그 동등한 terminfo el: echotc ce(도 echoti el에를 zsh))


14

캐리지 리턴 ( \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        

1
대신 두 \r당신이 사이의 모든 공백을 넣을 수 \rHave fun\n.
Barmar

2

이 작업을 수행하는 방법에는 여러 가지가 있으며, 바보 증명부터 우아한 것까지 다양합니다.

가장 안전한 방법은 (가장 많은 작업이지만) 여러 번 필요한 백 스페이스 공간 백 스페이스입니다. 이것은 텔레타이프 이외의 모든 작업에 적용됩니다 (용지에서 잉크를 제거하는 것은 어렵습니다).

다음으로 저울은 캐리지 리턴 공간 캐리지 리턴입니다. 이것은 각 캐리지 리턴 전후에 줄 바꿈을 삽입하는 터미널 에뮬레이터에서는 작동하지 않습니다 (이 옵션은 미니 컴이며 다른 구성 요소는 가질 수 있음).

그러면 termcap 및 terminfo 데이터베이스가 사용법을 표시 할 수 있으므로 termcap 기능 코드 만 언급 할 터미널 고유의 요령이 있습니다. (목록은 다음과 같습니다.)

한 줄의 단순은 열 (ch)로 이동 한 다음 행 끝 (ce)으로 이동합니다.

다중 라인 응답을 포함하는 더 복잡한 경우에는 절대 위치 저장 (sc), 프롬프트, 읽기 응답, 커서 위치 복원 (rc), 화면 끝까지 클리어 (cd)가 있습니다.

대부분의 경우 대부분의 터미널 에뮬레이터가 호환되므로 마지막 두 개의 답변에 대해 vt100 값을 하드 코딩 할 수 있습니다. 물론 모든 터미널이 이러한 옵션을 지원하는 것은 아니지만 드물고 사용되지 않는 터미널입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.