我正在尝试获取程序中的列数和行数。我使用以下代码来执行此操作:
...
char *cols = getenv("COLUMNS");
printf("cols: %s\n", cols);
char *lines = getenv("LINES");
printf("lines: %s\n", lines);
...
问题在于,当我运行它时,我得到两个都为空。使用其他环境变量(例如PATH
或USER
)运行此工作正常。
我觉得奇怪的是,从同一个shell运行echo $COLUMNS
和echo $LINES
都可以正常工作。
为什么我的程序无法获取这两个环境变量。
答案 0 :(得分:4)
COLUMNS
和LINES
设置,但不是导出,这意味着
它们不会添加到随后执行的命令的环境中。
(要验证这一点,请检查/usr/bin/env
的输出:它会显示PATH
和USER
,但不显示COLUMNS
和LINES
。)
在bash shell中,您可以调用export VAR
来标记要导出的变量。
或者,请参阅Getting terminal width in C? 以各种方式以编程方式获得终端宽度和高度。
答案 1 :(得分:1)
如果您没有看到$LINES
和$COLUMNS
,则可能未设置它们。 xterm手册页说明了可能的设置,具体取决于系统配置。
如果你想看看哪些环境变量传递给你的程序,请使用这个小程序(它使用main()
的第三个非标准“隐藏”参数,该参数应该适用于所有IXish系统:
#include <stdio.h>
int main(int argc, char *argv[], char *envp[])
{
while (*envp)
{
printf("%s\n", *envp++);
}
}
如果您想以便携方式获取终端窗口大小,最好使用ioctl(..., TIOCGWINSZ, ...)
答案 2 :(得分:0)
实际上,COLUMNS
和LINES
是shell变量,但不是环境变量。
您可以使用env
显示当前shell中的环境变量列表,使用set
显示shell变量列表。你会发现环境变量是shell变量的一个子集。
这个问题的答案很有帮助:
differnce between the shell and environment variable in bash