建立在同一螢幕中循環的腳本

建立在同一螢幕中循環的腳本

我的腳本有一個簡單的問題,我需要在同一螢幕中顯示行腳本,並且不顯示上面的最後訊息,請參閱我的演示程式碼:

#!/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

結果代碼:

目前程式碼

我需要以不產生第一個範例的多行的方式顯示此信息,並僅顯示相關資訊的循環,如第二個範例所示:

我該怎麼做:

我的目標

依此類推,因此終端上不會有先前的循環印象,只有現在正在列印的內容。

答案1

假設clear真正清除螢幕,那麼顯示的腳本本身將不會產生第一個螢幕截圖。如果你有一個額外的進程附加到/tmp/temp_script.log,那麼它可以做一些事情...

另一方面,如果您的終端沒有清除螢幕,那就是問題的一部分。也許那條彩色線是您運行腳本的提示符,您可能希望將其保留在螢幕頂部:

  • 通常您會設定TERM一個與終端描述相對應的合適值。
  • 「合適的」終端機描述告訴如何清除螢幕。
  • 作為副作用,清除螢幕(按照慣例)也會將遊標移到螢幕的左上角,但是
  • 從螢幕左上角清除螢幕也會清除彩色線(您可以可能想保留)
  • 如果你想從第二行清除,你可以(在大多數終端上)這樣做
    printf '\033[2H\033[J''

或者

    輸出杯 1 0
    tput 編輯
  • 但請記住,如果您的提示最初不在螢幕頂部,那麼這只會留下任何內容曾是在螢幕頂部未觸及。

問題的另一部分是這三行重複列印,沿著螢幕向下延伸。您可以更改它以將遊標移動到要列印計數器的位置,例如,

    printf '\033[4H'

或者

    輸出杯 3 0

將它們放在一起,您的腳本可能如下所示(並使用,因為您和/或終端描述printf似乎有問題):TERM

    #!/bin/bash

    如果[-t 0];然後 stty -echo -icanon -icrnl 時間 0 分鐘 0;菲
    #結果=`感測器-A`
    計數=0
    printf '\033[2H\033[J''
    按鍵=''
    迴聲“林哈1”
    迴聲「林哈2
    while [ "x$keypress" = "x" ];做    
      讓“數++”
      printf '\033[4H'
      回顯$計數
      睡覺 1
      按鍵=“`貓-v`”
    完畢
    如果[-t 0];然後精神正常;菲
    出口0

延伸閱讀:

相關內容