我想知道是否可以打印任何字符直到行尾。我知道这是一个愚蠢的问题。 但如果它可能,那么这将帮助我提高我的脚本的外观,因为人们使用不同大小的腻子窗口。
目前我根据窗口大小打印“ - ”直到EOL。但尺寸不同,“ - ”在其他终端的下一行。 如下所示:
echo“--------------------------------------------- ----------------------------------------------“
我需要在shell脚本中完成此操作。有没有办法找到屏幕宽度并相应打印?
答案 0 :(得分:2)
您可以使用:
tput cols
获取屏幕宽度。
答案 1 :(得分:1)
您可以使用:
cols=$(tput cols)
for ((i=0; i<cols; i++));do printf "-"; done; echo
或在非BASH使用中:
cols=`tput cols`
i=0
while [ $i -lt $cols ]; do echo -n "-"; i=`expr $i + 1`; done; echo
答案 2 :(得分:1)
正如其他人所说,tput cols
是获得终端宽度的合理标准方法。当您调整终端的大小时,现代终端应发送一个SIGWINCH,可以捕获并用于重新确定终端的大小。有些shell已经内置了对此的支持。如果您使用bash shell并打开checkwinsize
shell选项,bash
将尝试通过捕获此信号来保持环境变量LINES
和COLUMNS
的正确性。
你甚至可能会发疯并自己陷入SIGWINCH。我发现这个平等的部分具有教育性和误导性:
trap 'tput cols' SIGWINCH
以上原因导致shell在调整大小时输出当前术语宽度而不是 ,但在调整大小后输出下一个输入。我假设这不是因为信号稍后发射,而是因为这是trap
运行命令的最早机会。我认为这是一个shell限制。
答案 3 :(得分:0)
它可以在zsh中运行而无需评估...
eval printf '=%.0s' {1..$(tput cols)}