如何在终端中找到垂直线的数量?


12

我正在写一个脚本,当我进入cd时显示目录的git日志。这样的日志可能不胜枚举,包含数百行。到目前为止,我一直将其限制为硬编码的20行(... | head -n 20),这在工作中的屏幕上还可以,但是在家用的较小MacBook屏幕上就太多了。

我希望日志占据任一终端上(垂直)屏幕的一半左右。而且“终端”也发生了变化:它是Gnome终端在工作,而iTerm2在家里。而且我不使用屏幕或tmux。

如何从命令行找到终端中可用的垂直线数?

Answers:


21

终端参数存储为$LINES$COLUMNS变量。

另外,您可以使用特殊的术语操作程序,例如tput

tput lines  # outputs the number of lines of the present terminal window.
tput cols   # outputs the number of columns of the present terminal window.

9
LINES并且COLUMNS仅由某些外壳设置。bash设置它们,仅用于交互式外壳程序(并且不导出它们)。
mr.spuratic 2015年

1
我的tcsh中不存在环境变量。另外,我不知道如果您调整终端窗口的大小,系统是否会重置它们。tput和stty都对我
有用

@jamesqf bash文档说:“收到SIGWINCH后自动设置。” 因此,是的,如果您调整终端窗口的大小,它的确会更改它们。
Celada 2015年

对于上面可用的自动设置,以下选项是负责的shopt -s checkwinsize,这些选项已添加到我的/etc/bash.bashrc文件中并带有注释:# check the window size after each command and, if necessary, update the values of LINES and COLUMNS.
Costas

9

此命令应为您提供终端上的行数:

stty size | cut '-d ' -f1

某些系统可能未实现,stty size因此您可能需要这样的东西:

stty -a | tr \; \\012 | grep rows | tr -d ' rows'

1
这似乎是特定于操作系统的。您可以编制每个咒语适用的系统列表吗?
沃伦·杨

4
我担心第一个可能是特定于操作系统的,这就是为什么我添加第二个的原因。确实,经过一番谷歌搜索之后,我发现第一个可能无法在Solaris上运行。第二个应该非常便携。老实说,@ Costas tput lines似乎是更好的答案,我对此表示赞同。我以前不知道
Celada'2

1
我想提供替代长管与stty -a用类似grep -Po 'rows \K[^;]*'sed -n 's/.*rows \([^;]*\).*/\1/p'
科斯塔斯

实际上,令人沮丧的是,@ Costas既没有我的命令,也没有您的命令在MacOS上运行,因此我不得不提出另一个命令(已编辑)。转到图:MacOS发出“ 24行”而不是“第24行”!我仍然认为这tput lines是更好的方法,并且我认为它非常便携!
Celada
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.