我正在运行一个 tclsh 脚本,并试图确定终端窗口中的行数。当我从命令行运行命令时,我得到了正确的数字 (70)。
$ tclsh
% tput lines
70
但是当我从 puts/exec 内部运行命令时,我得到一个不同的数字(24)。
$ tclsh
% puts [exec tput lines]
24
我要找的号码是 70……我做错了什么?
我正在运行一个 tclsh 脚本,并试图确定终端窗口中的行数。当我从命令行运行命令时,我得到了正确的数字 (70)。
$ tclsh
% tput lines
70
但是当我从 puts/exec 内部运行命令时,我得到一个不同的数字(24)。
$ tclsh
% puts [exec tput lines]
24
我要找的号码是 70……我做错了什么?
利用:
[exec tput cols >@ stdout]
原因是没有 >@ 重定向,Tcl 使用管道从孩子的标准输出中读取(产生 [exec] 的结果)。因此 tput 的 ioctl()s 在管道上运行,该管道获得与周围终端无关的默认几何图形。
参考: https ://groups.google.com/g/comp.lang.tcl/c/bX8wjU8Z2To
$ tput lines
43
$ tput cols
87
$ tclsh
% tput lines
43
% tput cols
87
% exec tput lines
24
% exec tput cols
80
% exec tput lines >@stdout
43
% exec tput cols >@stdout
87
%