use*_*082 5 shell shell-script
我知道这很简单,但我不记得它的位置/名称。
存储终端当前宽度的变量在哪里?
我看到这个答案谈到了改变: 终端长度和宽度如何通过 SSH 和 telnet 转发?
但我想获得当前值,以用于脚本(并且我不了解该答案中的所有内容)。
曾几何时,我记得有某种方法可以显示所有环境变量?(嗯,我看到一个回答说 use set
(vs. env
),但我set
只显示 LINES 而不是宽度?)
然后当然是下一个问题;一旦我有了那个 $number 我想多次重复一个字符( "-" ),以制作一条 X 字符宽的虚线(填充终端,不换行)。如果你有一种优雅的方式,我应该这样做,我也会很感激。
规范的方法是询问终端它的实际大小,当你想知道它时
stty size
Run Code Online (Sandbox Code Playgroud)
打印行列。
关于你的第二个问题,seq
你的朋友
stty size|if read rows cols
then for x in `seq $cols`
do printf "-"
done fi
Run Code Online (Sandbox Code Playgroud)
或每个awk
循环
stty size|awk '{ ORS="-"; n=$2; for (i=0; i<n; ++i) { print ""; } }'
Run Code Online (Sandbox Code Playgroud)
.
但实际上最好将我们的行保存在变量中
eval $(L=""; stty size|if read r c
then for x in `seq $c`
do L="${L}-"
done
echo L="$L"
fi
)
Run Code Online (Sandbox Code Playgroud)
只要我们不需要重新计算终端大小
trap 'echo "recalculate L"' SIGWINCH
Run Code Online (Sandbox Code Playgroud)
我们现在可以使用$L
来打印该行。当然,您可以自动调整您的$L
变量SIGWINCH
:
trap 'eval $(L=""; stty size|if read r c
then for x in `seq $c`
do L="${L}-"
done
echo L="$L"
fi
)' SIGWINCH
Run Code Online (Sandbox Code Playgroud)
. 在您设置的终端中,trap
您可以这样说
echo $L
Run Code Online (Sandbox Code Playgroud)
你就完成了。
小智 1
我相信您可能正在寻找$COLUMNS
变量。
至于使字符跨越终端的整个宽度,这是一个基于 值的简单循环$COLUMNS
。如果屏幕的大小与历史记录中的那些行一起调整,它们看起来会很不愉快。
归档时间: |
|
查看次数: |
4349 次 |
最近记录: |