답변:
스크립트에서 확인하는 방법을 찾고 있다면 다음 중 하나를 수행하십시오.
tput cols
andtput lines
그러나 세부 사항을 원하면 여기로 이동하십시오.
가상 터미널 (xterm 등)의 경우 ioctl()
창의 크기를 알려주 는 시스템 호출이 있습니다. 가능하면 less
이 통화를 사용하십시오. 또한 창의 크기를 변경하면 해당 창에서 실행중인 모든 것이 새 창 크기를 확인해야한다는 SIGWINCH
신호를 받습니다 less
. 예를 들어, less
프로세스 ID 16663로 실행을 시작하고 에 연결 strace
하고 창 크기를 조정했습니다. 이것이 내가 본 것입니다 :
$ strace -p 16663
Process 16663 attached - interrupt to quit
read(3, 0xbfb1f10f, 1) = ? ERESTARTSYS (To be restarted)
--- SIGWINCH (Window changed) @ 0 (0) ---
rt_sigaction(SIGWINCH, {0x805cf10, [WINCH], SA_RESTART}, {0x805cf10, [WINCH], SA_RESTART}, 8) = 0
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
ioctl(1, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 opost isig -icanon -echo ...}) = 0
ioctl(1, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 opost isig -icanon -echo ...}) = 0
ioctl(1, TIOCGWINSZ, {ws_row=40, ws_col=80, ws_xpixel=0, ws_ypixel=0}) = 0
ioctl(2, TIOCGWINSZ, {ws_row=40, ws_col=80, ws_xpixel=0, ws_ypixel=0}) = 0
가능 하다면 장면 뒤에서 무엇 tput cols
을 tput lines
해야할까요? 이 방법에 대한 자세한 내용 man tty-ioctl
은 TIOCGWINSZ를 참조하십시오 .
그러나 직렬 포트에 연결된 터미널과 같은 다른 터미널의 경우이 정보를 직접 얻을 수있는 방법이 없습니다. 이 경우 less
환경 변수에서 힌트를 찾기 시작합니다.
LINES
그리고 COLUMNS
종종 단말기 치수로 설정된다. 실제로, 터미널 치수를 찾 bash
거나 zsh
찾을 수있는 경우 , 이러한 변수 자체를 자동으로 설정하여 잘 모르는 프로그램이 터미널 크기를 쉽게 볼 수 있도록합니다. 그러나 포함한 대부분의 다른 조개, dash
그리고 tcsh
, 이러한 변수를 설정하지 마십시오.TERM
일반적으로 터미널 유형으로 설정되며,이 경우 terminfo 데이터베이스는 터미널의 예상 크기를 포함 할 수 있습니다. tput rows
IOCTL을 사용할 수없는 경우 (예를 들어 직렬 포트를 통해 연결된 경우) 여기에 기록 된 값으로 대체됩니다. 크기가 변할 수있는 터미널의 경우 이것은 추측 일 뿐이며 잘못된 것일 수 있습니다.자세한 정보 man tput
는 터미널을 제어하는 명령 및 man terminfo
터미널에 지시 할 수있는 작업 목록을 참조하십시오 .
소스 코드를 살펴보면 Linux에서 창 크기를 검색하는 less
호출 ioctl()
을 알게됩니다 .
#ifdef TIOCGWINSZ
{
struct winsize w;
if (ioctl(2, TIOCGWINSZ, &w) == 0)
{
if (w.ws_row > 0)
sys_height = w.ws_row;
if (w.ws_col > 0)
sys_width = w.ws_col;
}
}
#else
#ifdef WIOCGETD
{
struct uwdata w;
if (ioctl(2, WIOCGETD, &w) == 0)
{
if (w.uw_height > 0)
sys_height = w.uw_height / w.uw_vs;
if (w.uw_width > 0)
sys_width = w.uw_width / w.uw_hs;
}
}
#endif
이것이 당신이 찾고있는 정보인지 확실하지 않습니다. 에 less
대한 신호 처리기를 등록한다고 생각 합니다 SIGWINCH
. 터미널의 치수가 변경되면 SIGWINCH
신호를 받고 터미널의 현재 치수에 대한 tty 정보를 검사합니다.
http://www.gnu.org/software/libc/manual/html_node/Miscellaneous-Signals.html