我在脚本中使用“tput cols”一切正常,除非窗口最大化。我的脚本能够正确地获得任何窗口大小,但是当窗口最大化时,它会得到一个错误的值(80)。然后我直接在终端输入“tput cols”,得到正确的大小(158)。所以我的问题是,即使窗口最大化,我怎样才能获得正确的值?
提前致谢
答案 0 :(得分:4)
tput cols
可能正在读取shell环境变量$COLUMNS
而不是TIOCGWINSZ
ioctl。 shell可能会更新此变量以响应SIGWINCH
,但这当然不会影响脚本中的$COLUMNS
变量。
尝试unset COLUMNS
并查看tput cols
是否从终端ioctl中获取值。
答案 1 :(得分:2)
首先运行:
$ shopt -s checkwinsize
来源:https://www.gnu.org/software/bash/manual/html_node/The-Shopt-Builtin.html
尝试使用resize
作为命令以获取有关的信息。您将获得所需的值。为了在你的程序中使用它们,你可以写下这样的东西:
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
答案 2 :(得分:0)
对于bash中的类似问题,当我正在做
# X is a script that uses 'tput cols'
$(eval X)
...它恢复为80列。
因此,我将评估更改为:
T=`tput cols`
$(COLUMNS=$T X)