我在脚本中使用“tput cols”一切正常,除非窗口最大化。我的脚本能够正确获取任何窗口大小,但是当窗口最大化时,它会得到一个错误的值(80)。然后我直接在终端中输入“tput cols”,得到正确的尺寸(158)。所以我的问题是,即使窗口最大化,我怎样才能获得正确的值???
提前致谢
我在脚本中使用“tput cols”一切正常,除非窗口最大化。我的脚本能够正确获取任何窗口大小,但是当窗口最大化时,它会得到一个错误的值(80)。然后我直接在终端中输入“tput cols”,得到正确的尺寸(158)。所以我的问题是,即使窗口最大化,我怎样才能获得正确的值???
提前致谢
tput cols
可能是从 shell 环境变量$COLUMNS
而不是TIOCGWINSZ
ioctl 读取的。shell 可能会更新此变量以响应SIGWINCH
,但这当然不会影响$COLUMNS
脚本中的变量。
尝试unset COLUMNS
查看是否tput cols
从终端 ioctl 获取值。
首先运行:
$ shopt -s checkwinsize
来源:https ://www.gnu.org/software/bash/manual/html_node/The-Shopt-Builtin.html
尝试使用resize
as 命令以获取有关信息。您将获得所需的值。为了在您的程序中使用它们,您可以编写如下内容:
echo "Old value of COLUMNS: $COLUMNS"
# This should execute the output of resize and export the var you need
eval $(resize)
echo "New value of COLUMNS: $COLUMNS"
有关调整大小的更多信息,请查看man resize
或检查此链接:http: //invisible-island.net/xterm/manpage/resize.html
对于 bash 中的类似问题,当我在做一个
# X is a script that uses 'tput cols'
$(eval X)
...它正在恢复到 80 列。
所以,我将我的评估更改为:
T=`tput cols`
$(COLUMNS=$T X)