J'ai besoin d'afficher de gros fichiers journaux à l'aide d'un shell bash. J'utilisais less
pour ouvrir les fichiers, mais comme les lignes sont trop longues, il y a une sorte de retour à la ligne/Word en cours.
Étant donné que les fichiers sont des journaux Log4J et qu'il existe un modèle au début de chaque ligne, le fait d'avoir des lignes encapsulées rend difficile l'analyse de la sortie, j'ai donc commencé à utiliser less -S
qui coupe de longues lignes.
Mais maintenant, je dois utiliser tail -f
, et il encapsule également la sortie. Est-il possible de désactiver le retour à la ligne dans un shell bash pour toutes les commandes?
Note: il y a une réponse à une question différente qui mentionne la séquence d'échappement echo -ne '\e[?7l'
, mais cela ne semble pas fonctionner sur bash.
Avez-vous réellement besoin de tail -f
ou quelque chose comme less +F
faire? Comme il semble que vous souhaitiez toujours un pager interactif, il me semble qu'il serait beaucoup plus facile de s'en tenir à less
que d'en réimplémenter un vous-même.
Une dernière note: avez-vous envisagé tail -f file | less
?
Essayer:
less -S +F filename
Trouvé un bonne réponse du superutilisateur , qui fonctionne hors de la boîte pour gnome-terminal
, et probablement aussi pour d'autres terminaux:
setterm -linewrap off
En supposant que la variable COLUMNS
soit définie, vous pouvez exécuter
tail -f your-app.log | cut -c -$COLUMNS
sinon remplacer $COLUMNS
avec la largeur des colonnes du terminal, obtenue par stty -a
.
Vous pouvez désactiver le retour à la ligne pour less
, tail
et toutes les autres commandes sous Linux Sun avec:
tput rmam
Pour restaurer l'habillage de ligne, utilisez:
tput smam
Deux bonnes réponses/exemples ici
http://www.commandlinefu.com/commands/view/1710/tail-a-log-file-with-long-lines-truncated
tail -f logfile.log | cut -b 1-80
tail -f logfile.log | cut -b -$(tput cols)
Une mise en garde: au moins sur le terminal intégré de mon Mac, la découpe ne semble pas très bien gérer les caractères de tabulation. Il semble qu'il les affiche avec, par exemple, 8 espaces, mais les calcule simplement comme 4 espaces ou quelque chose comme ça. En d'autres termes, si votre terminal fait 80 caractères de large et que votre sortie contient plusieurs onglets par ligne, vous devez définir la largeur sur peut-être 60 ou quelque chose comme ça. YMMV.
L'émulateur de terminal terminator (http://software.jessies.org/terminator/) permet de ne pas envelopper de longues lignes et a un défilement horizontal (mais est écrit en Java).
Il y a quelques exemples sur cette page piping tail avec -f ... d'après mes tests, cela ne fonctionne pas correctement, si vous avez vraiment besoin de tuyauterie (par exemple, si vous devez rediriger quelque chose de plus, comme grep), vous pouvez utiliser quelque chose comme :
watch -n 1 'tail -n $(($LINES-3)) file.log | cut -c -$COLUMNS'
probablement pas le meilleur pour les performances mais fonctionne ... sinon si aucun pipping supplémentaire n'est requis, vous pouvez utiliser quelque chose de différent comme:
less -S +F file.log
Utilisez les options ci-dessous avec less
. Il désactivera l'habillage Word et préservera les couleurs du texte, si spécifié.less -SR +F filename
Il y a beaucoup de commentaires qui s'écartent de la question. La question de l'OP était
Mais maintenant, je dois utiliser
tail -f
, et il encapsule également la sortie. Est-il possible de désactiver le retour à la ligne dans un shell bash pour toutes les commandes?
Certains commentaires ont été faits à propos de la fonction d'autowrap, indiquant que tous les terminaux ne l'ont pas. Peut-être. Mais (à part terminator , dont les développeurs ne documentent pas description du terminal ) tous les exemples donnés étaient xterm, rxvt et certains ressemblants ou descendants. Ce sont tous liés.
Le +aw
option dans xterm
correspond à la ressource autoWrap
. En consultant le manuel, il est dit que
autoWrap (class AutoWrap)
Specifies whether or not auto-wraparound should be enabled.
This is the same as the VT102 DECAWM. The default is "true".
et dans Séquences de contrôle XTerm il dit
CSI ? Pm h
...
DEC Private Mode Set (DECSET).
Ps = 7 -> Wraparound Mode (DECAWM).
qui ne dépend certainement pas de votre choix de terminal, car tout terminal compatible VT100 prend en charge cette fonctionnalité. xterm et rxvt le font, par exemple. Les autres aussi.
On peut se demander si la fonctionnalité serait utile à OP. La suppression du retour à la ligne n'est qu'un aspect du problème:
COLUMNS
sur une "grande" valeur.cat
'un fichier journal à l'écran).Il y a des pagers qui peuvent faire ce qui est nécessaire, par exemple, multitail qui répertorie ses fonctionnalités
Le retour à la ligne peut être désactivé, après quoi on peut faire défiler vers la gauche/droite avec les touches de curseur
Étant basé sur ncurses, il devrait fonctionner sur n'importe lequel des terminaux cités.
vi
à l'intérieur du type vi
:set nowrap
Je crois qu'il existe également un plugin pour vi qui vous donnera un comportement de queue.