마침내 ssh
전화기를 켰지만, 그렇게 한 후, 고대에 하드코딩된 스크립트 중 일부가 80x24 해상도에만 매우 구체적이라는 것을 깨달았습니다.
나는 이것이 $COLUMNS
나에게 80점을 주고 몇 가지 일을 할 수 있게 해줄 것이라는 것을 알고 있지만, 내가 보고 있는 터미널의 다른 차원에 액세스할 수 있는 곳이 어디인지 알고 싶습니다.
나는 내가 사용할 수 있는 모든 터미널, 전화 또는 기타 하드웨어에 대해 세트를 하드코딩하고 싶지 않지만 지금으로서는 이것이 최선의 선택일 것 같습니다.
내 전화기는 누군가가 관심을 가질 경우를 대비해 ConnectBot을 통해 53x13을 제공합니다(더 나은 솔루션을 찾을 수 없습니까?).
답변1
$COLUMNS
for 행에 해당하는 것은 tty 장치 라인 규칙 설정(일반적으로 터미널 에뮬레이터에 의해 설정되거나 의 경우)을 기반으로 일부 $LINES
쉘에 의해 설정됩니다. 다음으로 클라이언트 가 제공하는 값이 설정됩니다(전송되는지는 모르겠습니다 ).zsh
bash
bash
ssh
sshd
ConnectBot
이 정보는 쉘 매뉴얼 페이지에서 찾을 수 있습니다. 예를 들어 zsh
: info zsh LINES
.
다른 옵션:
- 일부 시스템에서는 (및이는 향후 POSIX 버전의 표준이 될 것입니다.),
stty size
행과 동일한 정보를 반환합니다. 다른 경우에는<lines> <columns>
시스템마다 다른 형식으로 출력에 나타나는 경우가 많습니다.stty -a
ncurses
구현을 통해 및 를 사용하여 행과 열의 수를 얻을tput
수 있습니다 (터미널 장치에서 정보를 검색할 수 없는 경우 terminfo 데이터베이스를 쿼리하는 것으로 대체).tput lines
tput 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