web-dev-qa-db-fra.com

Comment désactiver le retour à la ligne dans un terminal?

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.

59
nunaxe

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?

9
jw013

Essayer:

less -S +F filename

  • Presse Ctrlc pour arrêter le tailing et maintenant Vous pouvez vous déplacer vers la gauche et la droite en utilisant les touches de curseur.
  • Presse Shiftf pour reprendre la queue
  • Presse Ctrlcq quitter
55
Boris Marcos

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

enter image description here

20
Yuri Ghensev

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.

17
enzotib

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
6
WinEunuuchs2Unix

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.

4
d-b

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).

3
gentledevil

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
2
nars

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

2
Kamal Nayan

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:

  • Le shell connaît la largeur du terminal, mais cela peut être remplacé en définissant COLUMNS sur une "grande" valeur.
  • Bien sûr, cela signifie que les applications passeront beaucoup de temps à écrire sur la marge de droite (et certaines, en se trompant, commenceront une nouvelle ligne de toute façon).
  • OP a probablement supposé que l'application défilerait vers la gauche/droite pour rendre le terminal large utilisable. (Terminator le fait - en partie - mais ses autres inconvénients l'annulent, sauf pour ceux qui n'utilisent le terminal que pour cat 'un fichier journal à l'écran).
  • ce que OP recherche réellement, c'est un ensemble d'outils qui peuvent être informés de désactiver le retour à la ligne, en particulier pour afficher les fichiers journaux. Si le terminal fonctionne assez bien pour une utilisation générale, cela n'a pas d'importance pour le choix des outils que l'on utilise au sein du terminal.

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.

2
Thomas Dickey

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.

1
Jacques