作为一个简单的例子,我想写一个CLI脚本,它可以在终端窗口的整个宽度上打印=。
#!/usr/bin/env php
<?php
echo str_repeat('=', ???);
or
#!/usr/bin/env python
print '=' * ???
or
#!/usr/bin/env bash
x=0
while [ $x -lt ??? ]; do echo -n '='; let x=$x+1 done; echo
作为一个简单的例子,我想写一个CLI脚本,它可以在终端窗口的整个宽度上打印=。
#!/usr/bin/env php
<?php
echo str_repeat('=', ???);
or
#!/usr/bin/env python
print '=' * ???
or
#!/usr/bin/env bash
x=0
while [ $x -lt ??? ]; do echo -n '='; let x=$x+1 done; echo
当前回答
还有stty,请参阅stty:打印或更改终端特征,更具体地说是特殊设置
$ stty size
60 120 # <= sample output
# To read into variables, in bash
$ read -r rows cols < <(stty size)
$ echo "rows: $rows, cols: $cols"
rows: 60, cols: 120
它将分别打印行数和列数,或者高度和宽度。
或者,您可以使用cut或awk来提取所需的部分。
stty大小为| cut -d" " -f1表示高度/行,stty大小为| cut -d" " -f2表示宽度/列
其他回答
在POSIX上,最终需要调用TIOCGWINSZ(获取窗口大小)ioctl()调用。大多数语言都应该为此提供某种包装器。例如,在Perl中,你可以使用Term::Size:
use Term::Size qw( chars );
my ( $columns, $rows ) = chars \*STDOUT;
受到@pixelbeat的回答的启发,这里有一个由tput带来的水平条,稍微滥用printf填充/填充和tr
printf "%0$(tput cols)d" 0|tr '0' '='
Tput cols表示列数。 Tput行数告诉你行数。
还有stty,请参阅stty:打印或更改终端特征,更具体地说是特殊设置
$ stty size
60 120 # <= sample output
# To read into variables, in bash
$ read -r rows cols < <(stty size)
$ echo "rows: $rows, cols: $cols"
rows: 60, cols: 120
它将分别打印行数和列数,或者高度和宽度。
或者,您可以使用cut或awk来提取所需的部分。
stty大小为| cut -d" " -f1表示高度/行,stty大小为| cut -d" " -f2表示宽度/列
yes = | head -n$(($(tput lines) * $COLUMNS)) | tr -d '\n'