터미널의 회선 번호를 얻는 방법은 무엇입니까? ("echo $COLUMNS"와 비교)

터미널의 회선 번호를 얻는 방법은 무엇입니까? ("echo $COLUMNS"와 비교)

마침내 ssh전화기를 켰지만, 그렇게 한 후, 고대에 하드코딩된 스크립트 중 일부가 80x24 해상도에만 매우 구체적이라는 것을 깨달았습니다.

나는 이것이 $COLUMNS나에게 80점을 주고 몇 가지 일을 할 수 있게 해줄 것이라는 것을 알고 있지만, 내가 보고 있는 터미널의 다른 차원에 액세스할 수 있는 곳이 어디인지 알고 싶습니다.

나는 내가 사용할 수 있는 모든 터미널, 전화 또는 기타 하드웨어에 대해 세트를 하드코딩하고 싶지 않지만 지금으로서는 이것이 최선의 선택일 것 같습니다.

내 전화기는 누군가가 관심을 가질 경우를 대비해 ConnectBot을 통해 53x13을 제공합니다(더 나은 솔루션을 찾을 수 없습니까?).

답변1

$COLUMNSfor 행에 해당하는 것은 tty 장치 라인 규칙 설정(일반적으로 터미널 에뮬레이터에 의해 설정되거나 의 경우)을 기반으로 일부 $LINES쉘에 의해 설정됩니다. 다음으로 클라이언트 가 제공하는 값이 설정됩니다(전송되는지는 모르겠습니다 ).zshbashbashsshsshdConnectBot

이 정보는 쉘 매뉴얼 페이지에서 찾을 수 있습니다. 예를 들어 zsh: info zsh LINES.

다른 옵션:

  • 일부 시스템에서는 (및이는 향후 POSIX 버전의 표준이 될 것입니다.), stty size행과 동일한 정보를 반환합니다. 다른 경우에는 <lines> <columns>시스템마다 다른 형식으로 출력에 나타나는 경우가 많습니다.stty -a
  • ncurses구현을 통해 및 를 사용하여 행과 열의 수를 얻을 tput수 있습니다 (터미널 장치에서 정보를 검색할 수 없는 경우 terminfo 데이터베이스를 쿼리하는 것으로 대체).tput linestput cols
  • 일부 xterm유사한 터미널 에뮬레이터(ConnectBot의 경우인지는 모르겠습니다)를 사용하면 \e[18t일부 이스케이프 시퀀스( )를 통해 터미널 크기를 쿼리할 수 있습니다. 예를 들어 다음과 같습니다 zsh.

    IFS=";" read -sd t $'ignore?\e[18t' lines cols
    

    $lines및 에 차원을 저장합니다 $cols.

  • \e[18t대부분의 터미널에서는 커서를 화면 오른쪽 하단 모서리로 이동하고 거기에서 커서 위치를 쿼리하는 대신 (더 일반적인) 이스케이프 시퀀스를 사용하는 것도 가능합니다 . 이는 tty 설정을 해당 설정에 맞추고 아직 이 작업을 수행하지 않는 쉘에 대한 환경 변수를 설정하는 데 사용할 수 있는 resize유틸리티와 함께 ​​제공되는 실제 기능입니다 .xterm$LINES$COLUMNS

    eval "$(resize -u)"
    

답변2

stty size현재 터미널의 행과 열 수를 출력합니다. 행 수를 추출하려면 첫 번째 필드만 유지합니다.

stty size | cut -d\  -f1

관련 정보