Seguindo o resultado do comando dmesg
watch -n 0.1 "dmesg | tail -n $((LINES-6))"
Funciona. Mas eu quero entender por que $(Linhas-6) funciona corretamente em vez de $linhas.
Obrigado.
2 answers
$(($LINE - 6))
substract 6 to $LINE
' s value and return the result.
Editar:
Quando se usa bash (e proabababably outra shell)
LINES Used by the select compound command to determine the column
length for printing selection lists. Automatically set if the
checkwinsize option is enabled or in an interactive shell upon
receipt of a SIGWINCH.
Em resumo, as linhas são fornecidas por si xterm
ou putty
para indicar as linhas e o número da coluna.
A razão tem duas partes.Eu quero entender por que $(Linhas-6) funciona corretamente em vez de $LINHAS.
-
watch
mostra um cabeçalho seguido por uma linha em branco, pelo que terá de subtrair 2 do número de linhas de ecrã disponíveis (ou usar a opção-t
para desligar o cabeçalho). -
Algumas linhas de saída
dmesg
são mais compridas do que a largura do ecrã, ocupando assim mais do que uma linha de ecrã. Já quetail -n
não explica isso. mas ao invés disso conta linhas lógicas independentemente de seu comprimento, ele pode entregar mais linhas na tela do que solicitado, ewatch
exibe apenas o primeiro screenfull deles, perdendo o resto (4 em seu caso de teste). Para remediar isso, você pode embrulhar as linhasdmesg
para caber na largura do ecrã antes de as alimentar atail -n
, por exemplo:watch "dmesg | fold -w$COLUMNS | tail -n$((LINES-2))"