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
我将在当前的最佳答案中添加一些详细信息。您可以使用以下“黑客”(也如此处建议的那样):
\nprintf \'%.s\xe2\x94\x80\' $(seq 1 $(tput cols))\nRun Code Online (Sandbox Code Playgroud)\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 ----------------------------\nRun 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}\nRun Code Online (Sandbox Code Playgroud)\n使用 bash 注册钩子可能可以使用this以非常相似的方式完成。
\nZum*_*rio 14
试试:
echo some text
printf '%*s\n' "${COLUMNS:-$(tput cols)}" '' | tr ' ' -
echo some text
Run Code Online (Sandbox Code Playgroud)
在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个选项。
在调用脚本之前导出变量:
export COLUMNS; ./your_script.sh
Run Code Online (Sandbox Code Playgroud)使用tput如谟德Vidrio建议。
printf %"$(tput cols)"s |tr " " "-"
Run Code Online (Sandbox Code Playgroud)