`reset` 명령에 지연이 포함되는 이유는 무엇입니까?


17

reset명령에는 화면 지우기와 돌아 가기 사이의 지연이 포함됩니다. 이것은 최신 터미널 유형도 xterm-256color있습니다. 왜?

man reset지연을 언급하지 않고 특수 문자열의 인쇄 만합니다. (화면을 지우는 것도 언급하지 않습니다. 터미널 초기화 문자열에 포함되어 있다고 가정합니다).

다음과 같은 출력이 나타납니다 strace -f reset.

nanosleep({tv_sec=1, tv_nsec=0}, 0x7ffe1964f100) = 0
ioctl(2, SNDCTL_TMR_STOP or TCSETSW, {B38400 opost isig icanon echo ...}) = 0

답변:


24

실제 (하드웨어) 터미널이 필요합니다. 예를 들어, 일부의 경우 재설정하는 유일한 방법은 하드웨어 재설정을 수행하는 것입니다.

그것은 터미널 에뮬레이터와 무해하며, 차이점을 알 수있는 기존의 방법이 없으므로 (일부 이스케이프 시퀀스가 ​​하드웨어 재설정을 수행하는지 여부를 결정하기가 너무 어렵 기 때문에) reset터미널이 실제라고 가정합니다.

시간 지연 tset은 1979 년 3BSD에서 다음과 같이 거슬러 올라갑니다 .

    /* output startup string */
    if (!RepOnly && !NoInit)
    {
            bufp = buf;
            if (tgetstr("is", &bufp) != 0)
                    prs(buf);
            bufp = buf;
            if (tgetstr("if", &bufp) != 0)
                    cat(buf);
            sleep(1);       /* let terminal settle down */
    }

ncurses에서 다소 발전했지만 동일한 지침을 사용합니다.

        if (!noinit) {
            if (send_init_strings(my_fd, &oldmode)) {
                (void) putc('\r', stderr);
                (void) fflush(stderr);
                (void) napms(1000);         /* Settle the terminal. */
            }
        }

더 읽을 거리 :

  • 연혁 (tset매뉴얼 페이지)
  • 연혁 (tput매뉴얼 페이지)

1
OpenBSD 코드에서, 1000ms 대기 (호출을 통해 napms(1000))는 다음과 같은 주석을 동반합니다./* Settle the terminal. */
Kusalananda

2
OpenBSD는 ncurses를 사용합니다.
Thomas Dickey

1
우리가 여기있는 동안 가능한 경우 지연을 제거하는 방법을 설명 할 수 있습니까?
user541686

7
@Mehrdad 당신은 시도 할 수 tput reset있습니다. 지연을 사용하지 않는 것 같습니다.
Ross Ridge

3
@Mehrdad stty sane는 첫 번째 조건을 지체없이 해결하는 것으로 보입니다.
sourcejedi
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.