AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / Perguntas / 732012
Accepted
telometto
telometto
Asked: 2023-01-17 12:09:33 +0800 CST2023-01-17 12:09:33 +0800 CST 2023-01-17 12:09:33 +0800 CST

É possível fazer o bash parar de piscar o texto?

  • 772

Eu tenho brincado um pouco com o bash e queria saber se é possível fazer o texto piscar parar se eu executar outro comando. Por exemplo, echo -e '\033[5mEXAMPLE\033[0m'produzirá um EXAMPLEtexto piscando; porém, gostaria de saber se é possível fazer o texto parar de piscar se um segundo comando for executado.

bash
  • 2 2 respostas
  • 83 Views

2 respostas

  • Voted
  1. Best Answer
    Stéphane Chazelas
    2023-01-17T12:34:03+08:002023-01-17T12:34:03+08:00

    O envio da <ESC>[5msequência informa ao terminal para definir os atributos piscantes dos caracteres que serão exibidos a partir de agora.

    Na maioria dos terminais, <ESC>[25mdesative isso para que os caracteres que serão enviados posteriormente tenham seu atributo piscante desativado. <ESC>[0m, o mesmo que <ESC>[mdesativa todos os atributos de renderização de caracteres, incluindo negrito, destaque, cor, etc. Não apenas piscando.

    O envio dessas sequências não alterará o que já foi exibido.

    Para que EXAMPLEalgum lugar na tela pare de piscar, você teria que enviar um novo EXAMPLEna mesma posição com o piscar que o sobrescreve.

    Por exemplo:

    printf '\r\33[5m%s\33[25m' EXAMPLE; sleep 5; printf '\r%s\n' EXAMPLE
    

    Exibiria um piscando EXAMPLEe, 5 segundos depois, moveria o cursor de volta para o início da linha (CR, também conhecido como \rmove o cursor para o início) e o substituiria por um sem piscar EXAMPLE.


    Com alguns terminais¹, também é possível alterar os atributos de todos os caracteres de uma região do display utilizando a <ESC><top>;<left>;<bottom>;<right>25$r sequência de escape DECCARA , padronizando a tela inteira se os limites não forem especificados. A DECSACEsequência de escape pode ser enviada para decidir se esses dois <top>;<left>e <bottom>;<right>as coordenadas são o primeiro e o último caracteres ou os cantos de uma área retangular.

    Exemplo:

    printf '\33[;;;;$r'
    

    Removeria todas as piscadas em toda a tela.

    Para remover o piscar de algum texto contíguo específico na tela com isso, você precisa saber as coordenadas do primeiro e do último caractere desse texto.

    Você pode consultar a posição do cursor com a <ESC>[6nsequência de escape.

    Com bash, você pode fazer isso e ler sua <ESC>[<y>;<x>Rresposta com:

    getpos() { IFS=$'\e[;' read -rsdR -p $'\e[6n' _ _ "$2" "$1"; }
    

    assumindo que o usuário não está digitando nada ao mesmo tempo ou antes, onde:

    • a sequência de escape é enviada como a prompt
    • dizemos readpara desativar echocom -spara que a resposta não apareça na tela
    • a resposta é lida raté o R dlimitador.
    • Fcampo dividido em Squalquer um dos caracteres <ESC>, , armazenando os campos resultantes nas [variáveis ​​, e .;__$2$1

    Então você pode fazer:

    printf '\33[5m%s\33[25m\n' 'Some earlier blinking text'
    getpos x1 y1; printf '\33[5m%s\33[25m%s' EXAMPLE; getpos x2 y2
    printf ' \33[5m%s\33[25m\n' 'Some extra blinking text'
    echo 'Some more text'
    

    E mais tarde, assumindo que não houve rolagem:

    printf '\33[%s;%s;%s;%s;25$r' "$y1" "$x1" "$y2" "$x2"
    

    Em tudo o que foi dito acima, usamos printfem vez de echopara torná-lo portátil em diferentes shells, ou diferentes compilações/versões/configurações dos mesmos. Com o printfbuilt-in do bash e a maioria das outras printfimplementações, você pode usar \eem vez de \33.


    ¹ que tem muito menos suporte do que as outras sequências de escape mencionadas aqui. Observe também que nem tmuxnem screenoferece suporte, mesmo que o terminal host o faça. Embora seja possível convencê-los a passar a sequência para o host, isso ainda não funcionaria corretamente com janelas divididas.

    • 4
  2. roaima
    2023-01-17T12:35:54+08:002023-01-17T12:35:54+08:00

    Texto piscando

    tput blink
    

    Reverter características

    tput sgr0
    

    Exemplo

    tput blink; echo This is blinking text; tput srg0
    

    Ou

    blink=$(tput blink) noblink=$(tput sgr0)
    printf '%s\n' "Here we go: ${blink}this blinks${noblink} and this is steady"
    

    Armado com isso e a capacidade de mover o cursor para cima ( tput cuu1) ou mesmo para uma posição absoluta ( tput cup Y X- (0,0) é o canto superior esquerdo), você pode substituir o texto piscando por um texto que não pisca, como desejar.

    Vale a pena ler mais sobre terminfo; você pode até salvar a posição atual do cursor, mover para um novo local para escrever seu texto e, em seguida, reverter a posição. E se o seu terminal não suportar isso, desde que corresponda $TERMà realidade, você simplesmente voltará a uma aproximação

    • 1

relate perguntas

  • exportar variáveis ​​​​env programaticamente, via stdout do comando [duplicado]

  • Problema estranho ao passar variáveis ​​do arquivo de texto

  • Enquanto a linha lê mantendo os espaços de escape?

  • ordem de substituição de processos `te` e `bash`

  • Execute um script muito lento até que seja bem-sucedido

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Possível firmware ausente /lib/firmware/i915/* para o módulo i915

    • 3 respostas
  • Marko Smith

    Falha ao buscar o repositório de backports jessie

    • 4 respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    user12345 Falha ao buscar o repositório de backports jessie 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl Por que a maioria dos exemplos do systemd contém WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve