Создание скрипта с зацикливанием на одном экране

Создание скрипта с зацикливанием на одном экране

У меня есть одна простая проблема с моим скриптом, мне нужен скрипт строки на том же экране и не отображается последняя информация выше, см. мой демонстрационный код:

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

или

    tput чашка 1 0
    tput ed
  • но имейте в виду, что если изначально ваша подсказка не была в верхней части экрана, это просто оставит все, что угоднобылв верхней части экрана нетронутым.

Другая часть проблемы заключается в том, что три строки печатаются повторно, спускаясь по экрану. Вы можете изменить это, чтобы переместить курсор туда, где вы хотите напечатать счетчик, например,

    printf '\033[4H'

или

    tput чашка 3 0

Объединив все это вместе, ваш скрипт может выглядеть следующим образом (и с использованием , поскольку с вашим описанием и/или описанием терминала printfчто-то не так ):TERM

    #!/bin/баш

    если [ -t 0 ]; тогда stty -echo -icanon -icrnl время 0 мин 0; fi
    #результат=`датчики -A`
    количество=0
    printf '\033[2H\033[J'
    нажатие клавиши = ''
    эхо "линья 1"
    эхо "Линья 2
    пока [ "x$keypress" = "x" ]; делать    
      пусть "count++"
      printf '\033[4H'
      эхо $count
      сон 1
      keypress="`cat -v`"
    сделанный
    если [ -t 0 ]; тогда stty вменяемый; fi
    выход 0

Дальнейшее чтение:

Связанный контент