tput cols在脚本中无法正常工作

时间:2013-01-13 21:07:20

标签: bash

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

提前致谢

3 个答案:

答案 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)