当前终端宽度的环境(?)变量的名称是什么?

当前终端宽度的环境(?)变量的名称是什么?

我知道这很简单,但我不记得它的位置/名称。

终端当前宽度的变量存储在哪里?

我看到这个答案谈到了改变事情: 终端长度和宽度如何通过 SSH 和 telnet 转发?

但我想获取当前值,以便在脚本中使用(并且我不理解该答案中的所有内容)。

曾几何时我记得有某种方法可以显示所有环境变量? (嗯,我看到一个答案说使用set(与env),但我的set只显示线条而不显示宽度?)


然后当然是下一个问题;一旦我有了那个 $number ,我想多次重复一个字符(“-”),以制作一条 X 字符宽的虚线(填充终端,不换行)。如果你有一个优雅的方式我应该这样做,我也会很感激。

答案1

尺寸

规范的方法是当你想知道它的实际大小时询问终端

stty size

打印行列。

打印虚线

关于你的第二个问题,seq你是朋友吗?

stty size|if read rows cols
then for x in `seq $cols`
do printf "-"
done fi

或每个awk循环

stty size|awk '{ ORS="-"; n=$2; for (i=0; i<n; ++i) { print ""; } }'

设置行变量

但实际上最好将我们的行保存在变量中

eval $(L=""; stty size|if read r c
    then for x in `seq $c`
    do L="${L}-"
    done
    echo L="$L"
    fi
)

SIGWINCH 上的陷阱

只要我们不需要重新计算终端尺寸

trap 'echo "recalculate L"' SIGWINCH

我们现在可以用来$L打印该行。当然,您可以自动调整$L变量SIGWINCH

trap 'eval $(L=""; stty size|if read r c
    then for x in `seq $c`
    do L="${L}-"
    done
    echo L="$L"
    fi
)' SIGWINCH

。在您设置的终端中,trap您可以这样说

echo $L

你就完成了。

答案2

没有环境包含终端宽度的变量。有一个变量:(高度COLUMNS也同样)。LINES这只是一个 shell 变量,对于 shell 调用的程序不可见。

原因COLUMNS只是一个shell变量并没有导出到环境中,因为一旦该变量在环境中,shell就无法修改它。如果您调整终端的大小,shell(或更一般地说,前台的任何程序)都会收到一个SIGWINCH信号。当 shell 收到 SIGWINCH 时,它会查询终端的当前大小并相应地更新COLUMNSLINES变量。

该命令set列出所有 shell 变量,因此包括COLUMNSLINES。命令envexport仅列出环境变量,因此不包括COLUMNSLINES

您可以导出COLUMNS以使其成为环境变量。但请注意,当应用程序使用它时,如果终端已同时调整大小,则该信息可能已过时。应用程序可以以与终端相同的方式查询终端大小,并为 SIGWINCH 信号注册一个处理程序,以便它可以保持信息最新。

1通过发送正确的读写控制命令。或者甚至通过致电stty sizetput cols

答案3

它位于set“列”下。

echo $COLUMNS

或者

set | grep -i columns

在bash中。

答案4

我相信您可能正在寻找$COLUMNS变量。

至于使字符跨越终端的整个宽度,这是一个基于 值的简单循环$COLUMNS。如果屏幕的大小与历史记录中的那些行一起调整,它们看起来会很不愉快。

相关内容