Eu preciso exibir arquivos de logs grandes usando um shell bash. Eu estava usando less
para abrir os arquivos, mas como as linhas são muito longas, há algum tipo de quebra de linha / palavra acontecendo.
Como os arquivos são logs do Log4J e existe um padrão no início de cada linha, ter linhas quebradas dificulta a análise da saída, então comecei a usar less -S
quais linhas longas são cortadas.
Mas agora eu preciso usar tail -f
, e também a linha envolve a saída. É possível desativar a quebra de linha em um shell bash para todos os comandos?
Nota: existe uma resposta para uma pergunta diferente que menciona a sequência de escape echo -ne '\e[?7l'
, mas parece não funcionar no bash.
screen
, existe um comando "wrap". Emxterm
, existe uma-aw
opção para impedir a quebra automática de linha. Provavelmente, existem alguns recursos X para outros emuladores de terminal. Qual emulador você está usando?gnome-terminal
.+aw
paraxterm
:) Mas isso resolve o problema de saída (por exemplo,ls -l
com um monte de nomes longos do Windows para o TPB, funciona bem), de entrada , ao digitar um comando, você provavelmente ainda quer quebrar (ou, pelo menos, você não quer isso da maneira que está agora+aw
: tente escrever além da "borda da coluna" e depois volte atrás para encontrar um grande erro de GFX).urxvt
nemrxvt
pode desativar a quebra de linha.Respostas:
Você realmente precisa
tail -f
ou gostaria de algo assimless +F
? Como parece que você ainda deseja um pager interativo, parece-me que seria muito mais fácil manter-seless
do que reimplementá-lo.Uma nota final: você já considerou
tail -f file | less
?fonte
screen
exterm
como esses emuladores têm opções para evitar quebra de linha. Mas há uma grande diferença entre truncar a linha e ocultar o final da linha para que possamos vê-la, se quisermos. O usotail -f file | less -S
não é perfeito, pois parece desativar o-f
mas é a melhor solução que encontrei.less
diretamente.Experimentar:
less -S +F filename
fonte
less -S
. Também é muito útil no laptop.Encontrei uma boa resposta do superusuário , que funciona
gnome-terminal
imediatamente e provavelmente para outros terminais:fonte
Supondo que você tenha a
COLUMNS
variável definida, você pode executarcaso contrário, substitua
$COLUMNS
pela largura das colunas do terminal, obtida porstty -a
.fonte
$COLUMNS
(não é atualizada imediatamenteSIGWINCH
, apenas no próximo prompt) estty -a
(mais difícil de usar no script) étput cols
.cut
comportamento comoless -S
onde a linha longa é armazenada no buffer e podemos ver a linha completa usando as teclas direcionais?screen
janelas separadas , cada uma comtail -f | cut
um script ou emulando de alguma forma oless
comportamento. Mas não tem uma solução, no momento.less -S
, ele vai estragar o texto colorido ou qualquer coisa com escape ANSI. Também pode estragar o Unicode.less -S
é mais útil com texto colorido. Você pode usarless -S -E
para sair imediatamente - útil para cortar impressões coloridas em $ COLUMNS.Você pode desativar quebra de linha para
less
,tail
e todos os outros comandos sob o sol Linux com:Para restaurar a quebra de linha, use:
fonte
O emulador de terminal terminator (http://software.jessies.org/terminator/) permite não quebrar linhas longas e possui rolagem horizontal (mas está escrito em Java).
fonte
terminator v1.91
.terminator
, este a que gentledevil está se referindo e o que você está usando.Duas boas respostas / exemplos aqui
http://www.commandlinefu.com/commands/view/1710/tail-a-log-file-with-long-lines-truncated
Uma ressalva: pelo menos no terminal interno do meu Mac não parece lidar muito bem com os caracteres de tabulação. Parece que os exibe com, por exemplo, 8 espaços, mas apenas os calcula como 4 espaços de largura ou algo parecido. Em outras palavras, se o seu terminal tiver 80 caracteres de largura e sua saída contiver várias guias por linha, você deverá definir a largura para talvez 60 ou algo assim. YMMV.
fonte
Use as opções abaixo com
less
. Desabilitará a quebra de linha e preservará as cores do texto, se especificado.less -SR +F filename
fonte
Existem alguns exemplos nesta página canalizando cauda com -f ... dos meus testes, ele não funciona corretamente, se você realmente precisa de canalização (por exemplo, se você precisa canalizar algo mais, como grep), pode usar algo como :
provavelmente não é o melhor para o desempenho, mas funciona ... caso contrário, se não for necessário fazer um extra, você pode usar algo diferente, como:
fonte
Há muitos comentários que se desviam da questão. A pergunta do OP foi
Alguns comentários foram feitos sobre o recurso de quebra automática, declarando que nem todos os terminais o possuem. Possivelmente. Mas (além do terminator , cujos desenvolvedores não documentam nenhuma descrição do terminal ), todos os exemplos dados foram xterm, rxvt e alguns semelhantes ou descendentes. Tudo isso está relacionado.
A
+aw
opção emxterm
corresponde aoautoWrap
recurso. Consultando o manual, ele diz quee em XTerm Control Sequences diz
o que certamente "não depende da sua escolha de terminal", já que qualquer terminal com compatibilidade com o VT100 suporta esse recurso. xterm e rxvt fazem isso, por exemplo. Os outros também.
Se o recurso seria útil ao OP é discutível. Suprimir quebra de linha é apenas um aspecto do problema:
COLUMNS
um valor "grande".cat
inserir um arquivo de log na tela).Existem pagers que podem fazer o que é necessário, por exemplo, multitail que lista em seus recursos
Sendo baseado em ncurses, deve funcionar em qualquer um dos terminais citados.
fonte
vi
dentro do tipo vi
Eu acredito que também existe um plugin para o vi que lhe dará um comportamento semelhante ao da cauda.
fonte
Se você realmente deseja ver as linhas completas, copie e cole o texto em um editor de texto como Atom ou Notepad ++ e desabilite a quebra de linha.
fonte