LINUX.ORG.RU

Как получить значения переменных типа LINES или COLUMNS?


0

0

По команде set выводится много чего полезного, в том числе кол-во строк и столбцов в текущем терминале. Вопрос: как получить значения этих переменных? В **environ их нет. Можно конечно вызвать из программы cat, записать вывод set в файл и потом оттуда читать, но это больно муторно. Подскажите как надо?

$ tput cols
80
$ tput lines
24
sdio ★★★★★ ()

Если нужен размер консоли

Если нужен размер консоли, то можно поюзать ioctl.

#include <stdio.h>
#include <stdlib.h>
#include <sys/ioctl.h>

int main(int argc, char **argv)
{
	struct winsize wbuf;
	if(ioctl(0, TIOCGWINSZ, &wbuf) == -1) {
		perror("ioctl");
		exit(1);
	}
	printf("%d rows x %d cols\n", wbuf.ws_row, wbuf.ws_col);
	return 0;
}
microprogs ()
Ответ на: комментарий от anonymous

> man 3 getenv

эти переменные являются «виртуальными» переменными шелла (как RANDOM),
а не реальными (как PATH):

$ for variable in PATH LINES RANDOM; do echo; eval echo value of $variable inside shell: \$$variable; printf «value of $variable inside a launched process: %s\n» «$(env | grep ^$variable)»; done

value of PATH inside shell: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
value of PATH inside a launched process: PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

value of LINES inside shell: 53
value of LINES inside a launched process:

value of RANDOM inside shell: 9633
value of RANDOM inside a launched process:


$ bash --version
GNU bash, version 3.2.48(1)-release (x86_64-pc-linux-gnu)
Copyright (C) 2007 Free Software Foundation, Inc.

dilmah ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.