Shell-Script
tput 可以進行多行對齊嗎?
我想將游標定位在特定的行/列並列印一個與其第一個座標保持對齊的多行文件/命令,以便
tput clear tput cup 5 15 ping www.google.com
將在第 15 列中輸出所有後續行。實際上,第一行列印正確,但以下行被重置到左側。是否可以使用
tput
或任何其他方法?
一種方法是在該位置設置製表位:
trap 'tabs -8' EXIT INT TERM # restore to default tab stops every 8 columns # upon exit or signal tput tbc # clear tab stops tput cup 5 15 tput hts # set one and only tab stop printf '\r' # move back to the beginning of the line printf '\t%s\n' foo bar baz ping www.google.com | paste /dev/null -
這確實會影響終端的行為,並且在暫停時可能會導致問題。
與@Thor 的
cup
基於方法相比,它的優勢在於它發送的輸出更少(除非您在 300 波特的衛星鏈路上,否則這不是真正的問題),並且如果像 syslog 之類的其他程序也在向終端寫入文本,則表現得更優雅。確保每行從位置 15 開始的另一種方法是在每行前面加上
\r$(tput cuf 15)
:tput cup 5 15 ping www.google.com | PREFIX=$(tput cr; tput cuf 15) awk ' {print ENVIRON["PREFIX"] $0}'
另請參閱
csr
設置滾動區域的功能。如果使用
zsh
,另請參閱zcurses builtin