从短划线字符中绘制一个水平线,占据bash中terminal的全部宽度

我需要一个命令,在terminal中绘制一条水平的“线”。 该行必须与terminal的长度完全相同(不pipe当前的terminal宽度),并且由一个破折号字符组成(尽pipe也可以使用一个水平行的unicode符号)。

如果它能被着色,它会更好。

我需要像这样使用它:

echo some text drawline echo more text 

输出结果如下所示:

 echo some text --------------------------------------------------------------------------------- echo more text 

试试:

 echo some text printf '%*s\n' "${COLUMNS:-$(tput cols)}" '' | tr ' ' - echo some text 

在bash和zsh中可以使用$COLUMNS变量。

我为此目的使用这条线:

 printf %"$COLUMNS"s |tr " " "-" 

您也可以使用seq ,但这不像其他解决方案那么直观:

 seq -s- $COLUMNS|tr -d '[:digit:]' 

编辑:

看来$COLUMNS是一个本地的bash变量,你将需要导出它。 所以现在有(至少)2个选项。

  1. 在调用脚本之前导出变量:

     export COLUMNS; ./your_script.sh 
  2. 使用tput Zumo de Vidrio建议。

     printf %"$(tput cols)"s |tr " " "-" 

一个简单的Perl单线程
stty size | perl -ale 'print "-"x$F[1]'


注意
您可以看到stty size终端的高度宽度


在这里输入图像描述