从破折号字符中绘制一条水平线,占据bash中终端的整个宽度

exe*_*ook 4 linux bash terminal

我需要一个在终端中绘制水平"线"的命令.该行必须与终端的长度完全一致(无论当前终端宽度如何),并且由短划线字符组成(尽管也可以使用水平线的unicode符号).

它是否可以着色更好.

我需要像这样使用它:

echo some text
drawline
echo more text
Run Code Online (Sandbox Code Playgroud)

输出看起来像这样:

echo some text
---------------------------------------------------------------------------------
echo more text
Run Code Online (Sandbox Code Playgroud)

cgl*_*cet 16

我将在当前的最佳答案中添加一些详细信息。您可以使用以下“黑客”(也如此处建议的那样):

\n
printf \'%.s\xe2\x94\x80\' $(seq 1 $(tput cols))\n
Run Code Online (Sandbox Code Playgroud)\n

请注意,它不使用简单的破折号-,而是使用方框图破折号\xe2\x94\x80。这样,连续的破折号实际上连接起来,打印出一条漂亮的连续线:

\n
This nice line   \xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\nAnd not this one ----------------------------\n
Run Code Online (Sandbox Code Playgroud)\n

例如,您可以使用它在使用 zsh注册挂钩的每个命令之前(和/或之后)显示一行

\n
# ~/.zshrc\ndraw_hline=false\npreexec() {\n  if [[ $1 == ls* ]]; then\n    hline\n    draw_hline=true\n  fi\n}\n\nprecmd() {\n  if [ $draw_hline = true ]; then\n    hline\n    echo\n  fi\n  draw_hline=false\n}\n
Run Code Online (Sandbox Code Playgroud)\n

使用 bash 注册钩子可能可以使用this以非常相似的方式完成。

\n


Zum*_*rio 14

试试:

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

  • 没有[归因](http://wiki.bash-hackers.org/snipplets/print_horizo​​ntal_line#a_line_across_the_entire_width_of_the_terminal)? (20认同)
  • 有人可以解释一下这是如何工作的吗?我希望能够将其缩短 n 个字符。 (3认同)

cb0*_*cb0 7

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

我将这一行用于此目的:

printf %"$COLUMNS"s |tr " " "-"
Run Code Online (Sandbox Code Playgroud)

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

seq -s- $COLUMNS|tr -d '[:digit:]'
Run Code Online (Sandbox Code Playgroud)

编辑:

看来这$COLUMNS是一个本地bash变量,您需要将其导出。因此,现在有(至少)2个选项。

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

    export COLUMNS; ./your_script.sh
    
    Run Code Online (Sandbox Code Playgroud)
  2. 使用tput如谟德Vidrio建议。

    printf %"$(tput cols)"s |tr " " "-"
    
    Run Code Online (Sandbox Code Playgroud)