COLUMNS=$(tput cols)
Ou em uma linha
sha512sum <filename> | cut -c -"$(tput cols)"
Isso é executado como esperado em um xterm: sha512sum <filename> | cut -c -$COLUMNS
, mas não em um script #! /bin/bash
, como dothis.sh <args>
, porque $COLUMNS
não é conhecido, por assim dizer.
Prefiro não transmitir $ COLUMNS como argumento nem exportá-lo para o ambiente.
O script não é crítico, precisa ser executado apenas em uma máquina, em uma linha de comando em um xterm.
Linux pre 3.2.0-4-amd64 #1 SMP Debian 3.2.81-2 x86_64 GNU/Linux
GNU bash, version 4.2.37
XTerm(278)
o bash define as variáveis do shell COLUMNS
e LINES
no modo interativo (houve problemas com o seu checkwinsize recurso que levou a essa distinção). Você pode obter essa informação de maneiras diferentes.
No contexto da pergunta, você sabe como criar um script de shell, mas não sabe onde obter dados úteis.
Na minha janela, tenho 40 linhas, 80 colunas:
tput cols
tenta primeiro as variáveis de ambiente (desde eles não estão configurados em seu ambiente, e isso também é bom), depois tenta as configurações do terminal do sistema e, em seguida, as descrições dos terminais. Colocar o tamanho na descrição do terminal não é mais feito muito; é uma muleta usada por aplicativos termcap (como o bash). Você receberia apenas um único número, por exemplo,
40
Devido a uma falha histórica, em um sistema FreeBSD (veja histórico e notas de portabilidade ), você teria que usar tput co
, porque (embora ncurses com terminfo seja usado como a biblioteca do sistema), ncurses ' tput
não é usado com o FreeBSD. O NetBSD e o OpenBSD, é claro, entraram em outras tangentes.
stty size
(disponível em várias plataformas) fornece os valores de linhas / colunas das configurações do terminal - ou nada, se esses não estiverem disponíveis. Ele fornece apenas dois números, que podem ser divididos facilmente em um shell:
40 80
resize
tenta o próprio terminal (usando seqüências de escape) e atualiza as configurações do terminal para Para o bash, você usaria resize -u
, dando saída assim:
COLUMNS=80; LINES=40; export COLUMNS LINES;
Nenhuma dessas opções é muito usada em cron
porque não há terminal envolvido. Mas todos eles são utilizáveis em um terminal.
Tags shell shell-script