Estou com um problema simples, com meu script, preciso do script de linha na mesma tela e não exibe as últimas informações acima, veja meu código de demonstração:
#!/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
O código do resultado:
Preciso exibir essas informações de uma forma que não gere essas múltiplas linhas do primeiro exemplo, e exibir apenas o looping das informações em questão, como no segundo exemplo:
Como posso fazer isso:
E assim por diante, para que não haja impressões anteriores do loop no terminal, apenas o que está sendo impresso agora.
Responder1
Supondo que oclear
realmente limpa a tela, então o script mostrado, por si só, não produzirá a primeira captura de tela. Se você tivesse um processo adicional anexado a /tmp/temp_script.log
, isso poderia fazer alguma coisa ...
Por outro lado, se o seu terminal não estiver limpando a tela, isso é parte do problema. Talvez essa linha colorida seja o prompt a partir do qual você executou o script, e você gostaria de mantê-la no topo da tela:
- normalmente você definiria
TERM
um valor adequado que corresponde a uma descrição do terminal. - uma descrição de terminal "adequada" informa como limpar a tela.
- como efeito colateral, limpar a tela (por convenção) também move o cursor para o canto superior esquerdo da tela, mas
- limpar a tela do canto superior esquerdo da tela também limparia a linha colorida (que vocêpoderquero manter)
- se você quisesse limpar a partir da segunda linha, você poderia (na maioria dos terminais) fazer
imprimirf '\033[2H\033[J'
ou
coloque xícara 1 0 tput ed
- mas tenha em mente que se o seu prompt originalmente não estivesse no topo da tela, isso deixaria o que quer que fosse.erana parte superior da tela intocada.
A outra parte do problema é que as três linhas são impressas repetidamente, descendo pela tela. Você pode alterar isso para mover o cursor para onde deseja imprimir o contador, por exemplo,
imprimirf '\033[4H'
ou
coloque o copo 3 0
Juntando tudo isso, seu script pode ficar assim (e usando printf
, já que algo parece errado com sua TERM
descrição e/ou terminal):
#!/bin/bash se [ -t 0 ]; então stty -echo -icanon -icrnl tempo 0 min 0; fi #resultado=`sensores -A` contagem=0 imprimirf '\033[2H\033[J' pressionamento de tecla='' eco "linha 1" eco "Linha 2 enquanto ["x$keypress" = "x"]; fazer deixe "contar++" imprimirf '\033[4H' eco $contar dormir 1 keypress="`gato -v`" feito se [ -t 0 ]; então muito são; fi saída 0
Leitura adicional: