У меня есть одна простая проблема с моим скриптом, мне нужен скрипт строки на том же экране и не отображается последняя информация выше, см. мой демонстрационный код:
#!/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
Дальнейшее чтение: