Como posso obter linhas para terminais? (vs. 'eco $ COLUMNS') [duplicado]

0

Eu finalmente consegui ssh no meu telefone, mas, ao fazer isso, percebo que alguns dos meus antigos scripts codificados são muito específicos para uma resolução de 80x24.

Estou ciente de que $COLUMNS vai me dar meus 80 e permitir que eu faça algumas coisas, mas gostaria de descobrir onde posso acessar a outra dimensão do terminal que estou vendo .

Eu odiaria ter que codificar um conjunto para cada terminal, telefone ou outro hardware que eu usasse, mas agora parece que esta pode ser a melhor opção.

Meu telefone me dá 53x13 com o ConnectBot (não consegui encontrar uma solução melhor?), caso alguém se importe.

    
por user3082 23.04.2018 / 13:27

2 respostas

1

stty size gera o número de linhas e colunas do terminal atual; para extrair o número de linhas, mantenha apenas o primeiro campo:

stty size | cut -d\  -f1
    
por 23.04.2018 / 13:29
3

O equivalente a $COLUMNS para linhas é $LINES . Isso é definido por alguns shells como zsh ou bash (embora no caso de bash , somente quando interativos) com base nas configurações de disciplina de linha de dispositivo tty (elas mesmas, normalmente definidas pelo emulador de terminal ou no caso de ssh , por sshd dos valores fornecidos pelo cliente (não sei se ConnectBot envia esses)).

Você deve ser capaz de encontrar as informações na sua página de manual do shell. Por exemplo, para zsh : info zsh LINES .

Outras opções:

  • em alguns sistemas (e que serão padrão em uma futura versão POSIX ), stty size retorna as mesmas informações que <lines> <columns> em uma linha. Em outros, eles geralmente aparecem na saída de stty -a , embora em um formato que varia de sistema para sistema.
  • Com a implementação ncurses de tput , você pode usar tput lines e tput cols para obter o número de linhas e colunas (que podem ser consultadas no banco de dados terminfo quando as informações não puderem ser recuperadas do dispositivo terminal).
  • Alguns emuladores de terminal xterm (não sei se esse é o caso do ConnectBot) permitem consultar o tamanho do terminal por meio de algumas seqüências de escape ( \e[18t ). Por exemplo, com zsh :

    IFS=";" read -sd t $'ignore?\e[18t' lines cols
    

    para armazenar as dimensões em $lines e $cols .

  • com a maioria dos terminais, em vez da sequência de escape \e[18t , também é possível usar seqüências de escape (mais comuns) que movem o cursor para o canto inferior direito da tela e consultam a posição do cursor lá. Isso é o que o utilitário resize fornecido com xterm realmente faz e pode ser usado para alinhar as configurações de tty a isso e definir as variáveis de ambiente $LINES e $COLUMNS para as shells que não o fazem por conta própria:

    eval "$(resize -u)"
    
por 23.04.2018 / 13:32