文字列を印刷するために端末でカーソルを上にスクロールする方法は?

文字列を印刷するために端末でカーソルを上にスクロールする方法は?

aircrack-ngここでは、端末画面にテキストを表示したり、マトリックススクリプトのようなものが欲しい...!

たとえば、私の端末画面にすでに4行が含まれている場合は、最初の行をその場所に更新し、他の行も同じように更新したいとします(bashを使用)

より正確には、次のスクリプトが必要です。

#!/bin/bash
while :
  do
    echo "line1"
    echo "line2"
    echo "line3"
    echo "line4"
    # without using clear cmd, next cycle line1 should be printed
    # in line1 place not in a new line , and same for other lines
  done

ベストアンサー1

これをサポートする端末では、次を使用してカーソルtput sc位置を保存およびtput rc復元できます。

i=0
tput sc
while sleep 1; do
  tput rc
  echo "line$((i=i+1))"
  echo "line$((i=i+1))"
  echo "line$((i=i+1))"
  echo "line$((i=i+1))"
done

出力

tput各呼び出しを避けるために、これらのエスケープシーケンスを変数に保存できます。

rc=$(tput rc) ||
  echo >&2 "Warning: terminal doesn't support restoring the cursor"
...
printf '%s\n' "${rc}line1..."

これをサポートしていないまれな端末では、常にカーソル位置決め順序を使用できます。

while sleep 1; do
  echo "line$((i=i+1))"
  echo "line$((i=i+1))"
  echo "line$((i=i+1))"
  echo "line$((i=i+1))"
  tput cuu 4 # or up=$(tput cuu1); printf %s "$up$up$up$up"
done

詳細については、terminfoセクション5のマニュアルページを参照してください(システムにncursesが提供されている場合)。

おすすめ記事