exe*_*ook 4 linux bash terminal
我需要一个在终端中绘制水平"线"的命令.该行必须与终端的长度完全一致(无论当前终端宽度如何),并且由短划线字符组成(尽管也可以使用水平线的unicode符号).
它是否可以着色更好.
我需要像这样使用它:
echo some text
drawline
echo more text
输出看起来像这样:
echo some text
---------------------------------------------------------------------------------
echo more text
cgl*_*cet 16
我将在当前的最佳答案中添加一些详细信息。您可以使用以下“黑客”(也如此处建议的那样):
\nprintf \'%.s\xe2\x94\x80\' $(seq 1 $(tput cols))\n请注意,它不使用简单的破折号-,而是使用方框图破折号\xe2\x94\x80。这样,连续的破折号实际上连接起来,打印出一条漂亮的连续线:
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例如,您可以使用它在使用 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使用 bash 注册钩子可能可以使用this以非常相似的方式完成。
\nZum*_*rio 14
试试:
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个选项。
在调用脚本之前导出变量:
export COLUMNS; ./your_script.sh
使用tput如谟德Vidrio建议。
printf %"$(tput cols)"s |tr " " "-"
| 归档时间: | 
 | 
| 查看次数: | 5830 次 | 
| 最近记录: |