はい。

はい。

特定の行/列にカーソルを置き、最初の座標と整列したままの複数行のファイル/コマンドを印刷したいと思います。

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

おすすめ記事