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 / 469770
Accepted
pLumo
pLumo
Asked: 2018-09-19 02:42:39 +0800 CST2018-09-19 02:42:39 +0800 CST 2018-09-19 02:42:39 +0800 CST

O cursor desaparece ao executar `top -n1 | cabeça`

  • 772

Ao correr

top -n1 | head

o cursor do terminal desaparece. Correr top -n1traz de volta.

Testado no Ubuntu 16.04 e CentOS 7.5 gnome-terminal.tilix


A execução top -n1 | tailnão tem esse problema, então acho que algo no final da topsaída deixa o cursor reaparecer, o que não é executado ao imprimir o headúnico.

O que causa isso e como posso voltar o cursor de forma mais elegante?

terminal gnome-terminal
  • 2 2 respostas
  • 1813 Views

2 respostas

  • Voted
  1. Daniele Santi
    2018-09-19T02:52:09+08:002018-09-19T02:52:09+08:00

    A melhor maneira de IMHO é topusar o modo "lote" ( -bflag) que se destina a ser usado com casos de uso não interativos, como canalização para outro programa ou para um arquivo.

    Então, é isso

    top -n1 -b | head
    

    não sairá do shell sem um cursor.

    Quanto ao motivo pelo qual o cursor desaparece ...

    Como topé um programa interativo, ele "mexe" com o terminal para pegar entrada, rolar conteúdo, etc, e oculta o cursor.

    Ao finalizar, deve-se restaurar o cursor e o status de exibição que encontrou antes de ser chamado, e o faz enviando um ou mais códigos de controle para o próprio terminal.

    Ao canalizar o comando por meio headde , esse código de controle não será transmitido ( headimprime apenas as primeiras 10 linhas por padrão, e a saída de ambos tope dos códigos de controle para restaurar o estado do terminal é sempre > 10 linhas).

    Na verdade, se você der headlinhas suficientes para imprimir, o cursor aparece!

    Por exemplo,

    top -n1 | head -n 100
    

    deixa um cursor no meu sistema.

    • 17
  2. Best Answer
    Digital Trauma
    2018-09-19T12:56:07+08:002018-09-19T12:56:07+08:00

    Não consegui recriar esse comportamento em todos os lugares, mas ele aparece no Ubuntu 18.04


    É instrutivo examinar os dumps hexadecimais da saída superior:

    $ top -n1 | head -n1 | xxd
    00000000: 1b5b 3f31 681b 3d1b 5b3f 3235 6c1b 5b48  .[?1h.=.[?25l.[H
    00000010: 1b5b 324a 1b28 421b 5b6d 746f 7020 2d20  .[2J.(B.[mtop - 
    00000020: 3133 3a34 333a 3034 2075 7020 3120 6d69  13:43:04 up 1 mi
    00000030: 6e2c 2020 3120 7573 6572 2c20 206c 6f61  n,  1 user,  loa
    00000040: 6420 6176 6572 6167 653a 2030 2e38 312c  d average: 0.81,
    00000050: 2030 2e35 342c 2030 2e32 321b 2842 1b5b   0.54, 0.22.(B.[
    00000060: 6d1b 5b33 393b 3439 6d1b 2842 1b5b 6d1b  m.[39;49m.(B.[m.
    00000070: 5b33 393b 3439 6d1b 5b4b 0a              [39;49m.[K.
    $ top -n1 | tail -n1 | xxd
    00000000: 1b5b 3f31 326c 1b5b 3f32 3568 1b5b 4b    .[?12l.[?25h.[K
    $ 
    

    Em particular, as sequências que iniciam 0x1b5b3fsão sequências de escape ANSI , que efetivamente são metadados para controlar coisas como a posição do cursor e a cor do texto.

    Em particular, no início da primeira linha da saída superior, há ESC [?25l, e no final da última linha é ESC [?25h. De acordo com a página da wikipedia, estes são os respectivos códigos para ocultar e mostrar o cursor.

    Ao canalizar a top -n1saída para head, o terminal receberá o comando hide-cursor no início, mas não o comando show-cursor no final e, portanto, o cursor permanecerá invisível até que alguma outra ação o ligue novamente.

    A sugestão do @MrShunz para usar a -bopção topestá correta. Esta opção desativa todas as seqüências de escape ANSI na saída do top, em vez de apenas produzir texto imprimível ASCII simples. Nenhum cursor será prejudicado durante a execução de topcom -b:

    $ top -b -n1 | head -n1 | xxd
    00000000: 746f 7020 2d20 3133 3a35 393a 3236 2075  top - 13:59:26 u
    00000010: 7020 3138 206d 696e 2c20 2031 2075 7365  p 18 min,  1 use
    00000020: 722c 2020 6c6f 6164 2061 7665 7261 6765  r,  load average
    00000030: 3a20 302e 3134 2c20 302e 3036 2c20 302e  : 0.14, 0.06, 0.
    00000040: 3037 0a                                  07.
    $ 
    
    • 6

relate perguntas

  • Procurando por um gerenciador de download de terminal

  • Erro de sintaxe: número fd inválido?

  • traceroute, imprima apenas as informações do gateway

  • Como posso dar uma olhada no ssh?

  • Área de memória Flash Nand de backup

Sidebar

Stats

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

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

    • 4 respostas
  • Marko Smith

    ssh Não é possível negociar: "nenhuma cifra correspondente encontrada", está rejeitando o cbc

    • 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

    Como descarregar o módulo do kernel 'nvidia-drm'?

    • 13 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
    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
    Wong Jia Hau ssh-add retorna com: "Erro ao conectar ao agente: nenhum arquivo ou diretório" 2018-08-24 23:28:13 +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
  • Martin Hope
    Bagas Sanjaya Por que o Linux usa LF como caractere de nova linha? 2017-12-20 05:48:21 +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