同じ画面を繰り返すスクリプトの作成

同じ画面を繰り返すスクリプトの作成

私のスクリプトには単純な問題があります。同じ画面に行スクリプトを表示し、上記の最後の情報を表示しないでください。私のデモコードをご覧ください。

#!/bin/bash

if [ -t 0 ]; then stty -echo -icanon -icrnl time 0 min 0; fi
#result=`sensors -A`
count=0
keypress=''
echo -ne "linha 1\nLinha 2\n " > /tmp/temp_script.log
while [ "x$keypress" = "x" ]; do    
  clear  
  let "count++" 
  output="$(cat /tmp/temp_script.log)"
  printf  "$output"\\b
  echo -en $count\\n
  sleep 1 
keypress="`cat -v`"
done
if [ -t 0 ]; then stty sane; fi
exit 0

結果コード:

現在のコード

最初の例の複数行を作成せずに、2番目の例のように関連情報のループのみを表示するようにこの情報を表示する必要があります。

どうすればいいですか?

私の目標

など、ターミナルには前のループの感じがなく、今印刷されている内容だけが残ります。

答え1

仮説clear画面を本当に消去すると、表示されたスクリプト自体は最初のスクリーンショットを生成しません。追加のプロセスがリンクされている場合は、/tmp/temp_script.logいくつかの操作を実行できます。

一方、端末から画面が消去されない場合、これは問題の一部です。そのカラーラインはスクリプトを実行するように求められ、画面の上部に残したい場合があります。

  • TERM通常、端末の説明に対応する適切な値を設定します。
  • 「適切な」端末の説明は、画面を消去する方法を教えてくれます。
  • 副作用で(慣習に従って)画面を消去すると、カーソルは画面の左上に移動しますが、
  • 画面の左上から画面を消去すると、カラーラインも消去されます。可能維持したい)
  • 2行目から消去するには(ほとんどの端末で)、次のようにします。
    printf '\033[2H\033[J'']

または

    出力カップ1 0
    入力の編集
  • しかし、最初にメッセージが画面の上部に表示されない場合は、何も残らないことを覚えておいてください。以前は画面上部はタッチされません。

問題の別の部分は、これらの3行が繰り返し印刷されて画面を引き出すことです。カウンタを印刷したい位置にカーソルを移動するように変更できます。たとえば、次のようになります。

    printf '\033[4H']

または

    排出カップ3 0

すべてをまとめると、スクリプトは次のようになります(printfユーザーや端末の説明に問題があるようです)。TERM

    #!/bin/bash

    if [-t 0]; then stty -echo -icanon -icrnl時間0分0; fe
    #result=`センサー-A`
    個数=0
    printf '\033[2H\033[J'']
    ボタン= ''
    エコ「リンハ1」
    エコ「リンハ2」
    while [ "x$keypress" = "x" ];    
      「数字++」にしておきます。
      printf '\033[4H']
      エコ$count
      睡眠1
      キー="`cat-v`"
    完璧
    [-t 0]なら正気です。
    0番出口

追加資料:

関連情報