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が提供されている場合)。
答え2
私は数ヶ月前にStackOverflowでこの質問に答えました。最後の端末出力を上書きする(複数行)。そう思うけど可能文字通り「line1」、「line2」などを印刷してOPが意味するのは教室の実習でのみ興味があるはずです。実際のプログラムはより興味深い内容を印刷するので、私は答えます。それ質問。以前と同様に、現在のq / aは、更新された行が既存の行よりも短い場合、この問題を無視します。この問題を解決する
#!/bin/bash
tput sc
while :
do
tput rc
echo "line1"; tput el
echo "line2"; tput el
echo "line3"; tput el
echo "line4"; tput el
# without using clear cmd, next cycle line1 should be printed
# in line1 place not in a new line , and same for other lines
done
これがcuu
良い選択肢であることに同意してくださいgrep
。機能の可用性を確認するために使用することは、tput
それ自体を使用するよりも効果が少なくなります。
restore=$(tput sc)
[[ -z "$restore" ]] && restore=$(tput cuu 4)
[[ -z "$restore" ]] && restore=$(tput cuu1; tput cuu1; tput cuu1; tput cuu1)
式に行番号を挿入する方法はまだやや粗雑です。しかし、$restore
ループが終わったらそれを行うことができます。
el
端末をチェックインすると同様のことができます。
これがbashの場合などecho "line1"
は実際には関数でなければなりません(冗長呼び出しを削除しますtput el
)。
OPに触れることができる端末は、これらの機能をすべてサポートできます。カーソル制御の保存/復元には2つの主な変形があるため、弱点です。
DECSC
/DECRC
(xtermでサポート - 参照XTerm制御シーケンス):ESC 7 Save Cursor (DECSC). ESC 8 Restore Cursor (DECRC).
ANSI.SYS(xtermでもサポートされていますが、すべての「xtermエミュレータ」はサポートされていません):
CSI s Save cursor (ANSI.SYS), available only when DECLRMM is disabled. CSI u Restore cursor (ANSI.SYS).
その他の有用な情報源:
ちなみに、この質問のタイトルは(これまでの回答がない)与えられた例では次のように使用されているため、間違っています。スクロール。スクロール領域を使用するには(terminfoをもう一度参照し、xtermなどのVT100に似た端末に制限する)ことができます。始める場所はここです(terminfoのマニュアルページから):
change_scroll_region csr cs change region to
line #1 to line #2
(P)