我的腳本有一個簡單的問題,我需要在同一螢幕中顯示行腳本,並且不顯示上面的最後訊息,請參閱我的演示程式碼:
#!/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
延伸閱讀: