数千行を出力するコマンドがあります。実際にコマンドの進行状況を確認するには、この行が必要です。ただし、最新の10行以上を表示する必要はありません。
どうすればいいですか?
pipe
とを使ってみましたtail
。しかし、それはうまくいきませんでした。元のコマンドが完了した後、最後の10行を取得しました。
whatever command that has too much output | tail -f
コンソールが消去されないことが重要です。これは、いくつかの重要な情報がコマンドの前に長い出力で印刷されるためです。
一例:
echo "Very important information. MUST BE VISIBLE!"
# This gives me about 10,000 lines of output pretty fast!
# This output should be shrinked down to the most recent 10
tar -cvf "Bckup.tar" "folder to backup/"
# More code
問題が解決することを願っています。
編集する:
問題はmultitail
画面全体を占めるという点だ。したがって、出力が複数ある場合(該当します。この前に、重要な情報を含む複数のコマンドを実行し、複数回使用する必要があります)。
これは10行しか表示されない画面で実行するのに最適です。 (私はこれがうまくいかないことを知っています)。
他のコマンドにいくつかの出力があると想像できます。その後、長い出力でコマンドを呼び出します。この出力は10行程度しか表示できない画面に残ります。コマンドが完了すると、より多くの出力がコンソールに送信され、コンソールは通常の出力のようにすぐ下になければなりません。
Output
Important Information
Other commands output
----------------------------------------
some lines for the tar command
----------------------------------------
More output
....
....
(ただ行がない)
ベストアンサー1
ECMA-48(vt100-ish)端末には、行のサブセットにスクロールを制限するエスケープシーケンスがあります。
CSI トップ ; 一番下 アル字型
これはデモです
# Start with the screen clean and cursor on line 1
clear
# print the non-scrolling banner line
echo Hello world
# set up the scrolling region to lines 2 through 11 and position the
# cursor at line 2
echo -n '^[[2;11r^[[2H'
# Run a command that will produce more than 10 lines, with a slight delay
# so it doesn't happen so fast you can't see it scrolling
perl -MTime::HiRes=sleep -le 'for(1..100) { print; sleep 0.05; }'
# Restore normal scrolling and put cursor on line 12
echo -n '^[[r^[[12H'
^[
注:上記のすべてのインスタンスは、スクリプトの実際のエスケープ文字でなければなりません。たとえば、viでは挿入モードで入力され、CtrlVその後にEsc。