Shell-Script

tput 可以進行多行對齊嗎?

  • February 2, 2019

我想將游標定位在特定的行/列並列印一個與其第一個座標保持對齊的多行文件/命令,以便

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

引用自:https://unix.stackexchange.com/questions/405244