접속원에 의한 Linux의 less 종료시의 거동

2812 단어 Terminal리눅스

의문



'새로운 리눅스 교과서
구체적으로는 Chapter08-04의 「export 명령」의 사용 예입니다.
이 장에서는 환경 변수 「LESS」에 대해 「--no-init」를 설정해, less 커멘드의 거동 변화를 확인한다(종료시에 화면 클리어하고 있던 것이, 화면 클리어 하지 않게 한다)라고 한다 하지만 Hyper-V에서 연결해 조작을 하고 있었는데, 특히 설정을 변경하지 않아도 화면 클리어되지 않는 거동을 하고 있어, 왜 교과서대로가 되지 않는지 몰랐습니다.
(alias도 확인했지만 less에 대해서는 설정 없음)
그래서 초학자입니다만, 가능한 범위에서 무엇이 원인인지 조사해 보았습니다.

조사해 본 거동



Linux에서 (Hyper-V에서 액세스 할 때) 동작 (less /etc/crontab → q로 종료)




화면이 지워지지 않고 표시 내용이 남아 있는지 확인할 수 있습니다.

터미널의 (Teraterm이나 GUI에서 터미널을 시작했을 때) 동작 (동일)





Terminal에서 액세스한 경우 종료 시 화면이 지워진 것을 알 수 있습니다.

조사하고 알게 된 것


  • less의 소스를 보았을 때, 「is_tty」가 True일 때는 화면 클리어하게 되어 있습니다. 이 변수는 「isatty(1)」가 설정되어 문서를 보면 터미널로부터 접속했을 때는 「1」이 되는 것 같습니다.
  • less의 소스 해당 부분: htps : // 기주 b. 이 m/gwsw/ぇ s/bぉ b/에 27853c89베 227아 d7아 1아 81아에 fd2942c03bd32다 d/만. c# L387

  • isatty 매뉴얼 ( "1"은 표준 출력을 나타내는 것 같습니다) : htps : // / xjm. 오 sd. jp / html / LDP_ manpache s / man 3 / is ty. 3. HTML
    (2020/04/06 : 받은 코멘트를 바탕으로 확인했는데, 확실히 isatty(1)는 어느 경우도 "1"을 돌려주고 있었기 때문에 삭제. @angel_p_57 씨 감사합니다!)
  • 환경 변수 $TERM이 로그인 방법에 따라 값이 변경되었는지 확인했습니다.
  • Hyper-V로 연결한 경우: linux
  • GUI에서 터미널을 시작하거나 외부에서 (teraterm으로) 로그인하는 경우 : xterm

  • 상기 환경 변수 TERM을 바꾸어 보면, 터미널에서도 Linux 같은 동작이 되거나, Linux상에서도 터미널 같은 동작이 되었기 때문에, isatty와 관련되어 있다고 생각됩니다. $TERM과 연동하는 것 같습니다.
  • $TERM에 의해 전환할 때, 「단말 정보(infocmp)」에 「smcup」 「rmcup」가 있을지 어떨지에 동작이 바뀐다고 하는 것입니다.
    (2020/04/06 받은 코멘트를 바탕으로 수정. @angel_p_57 씨 감사합니다!)

  • 사적 결론



    위의 교과서는 터미널에서 실행을 상정하고 있기 때문에 원칙적으로 리눅스에 직접 액세스하는 것이 아니라 터미널에서 움직여 보는 것이 좋다고 생각됩니다.

    좋은 웹페이지 즐겨찾기