Answers:
如果您发出命令
stty size
它以行和列的形式返回当前终端的大小。例:
$ stty size
24 80
您可以像这样将行和列读入变量(感谢Janis的comment):
$ read myrows mycols < <(stty size)
在像素上而获得的大小需要你的屏幕的分辨率的知识,我不认为stty
有这样的信息的直接访问。
bash
的echo
命令将看不到变量,因为read
管道中的将在子shell中执行。(但是ksh
,它适用于。)对于bash
您来说,您可能想使用read myrows mycols < <( stty size )
。
在桌面环境中,您正在使用X,该xwininfo
实用程序可以以像素为单位显示窗口的大小。另外,如果您在台式机上运行(而不是远程连接),则终端仿真器会提供一个变量$WINDOWID
,您可以将其用作的参数xwininfo
,例如,
xwininfo -id $WINDOWID
并获得以下列表:
xwininfo: Window id: 0xc00025 "uxterm"
Absolute upper-left X: 65
Absolute upper-left Y: 167
Relative upper-left X: 0
Relative upper-left Y: 22
Width: 624
Height: 577
Depth: 24
Visual: 0x22
Visual Class: TrueColor
Border width: 1
Class: InputOutput
Colormap: 0x21 (installed)
Bit Gravity State: NorthWestGravity
Window Gravity State: NorthWestGravity
Backing Store State: NotUseful
Save Under State: no
Map State: IsViewable
Override Redirect State: no
Corners: +65+167 -589+167 -589-256 +65-256
-geometry 103x42+65+145
在此示例中,带有Width
和的线Height
的大小以像素为单位。最后一行带有-geometry
以字符为单位的大小(以及左上角的位置-以像素为单位)。
谈到调整窗口大小,resize
程序将显示行数和列数。对于此示例,它显示
$ resize
set noglob;
setenv COLUMNS '103';
setenv LINES '42';
unset noglob;
这个问题并没有说明如何使用信息,但是由于输出是文本,而且格式可预测,因此很容易编写脚本。这是一个使用awk的简单示例:
#!/bin/sh
if [ -n "$WINDOWID" ]
then
xwininfo -id $WINDOWID | awk '
BEGIN { px = 0; py = 0; chars = "?x?"; }
/Height:/ { py = $2; }
/Width:/ { px = $2; }
/-geometry/ { chars = $2; sub("+.*","",chars); }
END { printf "%dx%d pixels, %s chars\n", py, px, chars; }'
else
printf '? no WINDOWID found\n'
fi
哪个打印
577x624 pixels, 103x42 chars