特定の行/列にカーソルを置き、最初の座標と整列したままの複数行のファイル/コマンドを印刷したいと思います。
tput clear
tput cup 5 15
ping www.google.com
列15の全ての後続行が出力される。実際、最初の行は正しく印刷されますが、後続の行は左にリセットされます。使用tput
や他の方法は可能ですか?
ベストアンサー1
1つの方法は、その位置にタップストップを設定することです。
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 -
これは端末の動作に影響を及ぼし、例えば一時停止された場合に問題を引き起こす可能性がある。
@Thorcup
ベースのアプローチと比較して、利点は少ない出力を送信することです(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