3

我在脚本中使用“tput cols”一切正常,除非窗口最大化。我的脚本能够正确获取任何窗口大小,但是当窗口最大化时,它会得到一个错误的值(80)。然后我直接在终端中输入“tput cols”,得到正确的尺寸(158)。所以我的问题是,即使窗口最大化,我怎样才能获得正确的值???

提前致谢

4

3 回答 3

4

tput cols可能是从 shell 环境变量$COLUMNS而不是TIOCGWINSZioctl 读取的。shell 可能会更新此变量以响应SIGWINCH,但这当然不会影响$COLUMNS脚本中的变量。

尝试unset COLUMNS查看是否tput cols从终端 ioctl 获取值。

于 2013-01-13T21:54:45.717 回答
2

首先运行:

$ shopt -s checkwinsize

来源:https ://www.gnu.org/software/bash/manual/html_node/The-Shopt-Builtin.html

尝试使用resizeas 命令以获取有关信息。您将获得所需的值。为了在您的程序中使用它们,您可以编写如下内容:

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

于 2013-03-20T13:03:26.057 回答
0

对于 bash 中的类似问题,当我在做一个

# X is a script that uses 'tput cols'
$(eval X)

...它正在恢复到 80 列。

所以,我将我的评估更改为:

T=`tput cols` 
$(COLUMNS=$T X)
于 2019-08-10T13:42:33.890 回答