¿Cómo deshabilitar el ajuste de línea en una terminal?

Necesito ver files de loggings grandes usando un shell bash. Estaba usando less para abrir los files, pero como las líneas son demasiado largas, hay algún tipo de envoltura de línea / palabra.

Como los files son loggings de Log4J, y hay un patrón al principio de cada línea, tener las líneas envueltas dificulta el análisis de la salida, así que comencé a usar less -S que corta las líneas largas.

Pero ahora necesito usar tail -f , y también la línea envuelve la salida. ¿Es posible desactivar el ajuste de línea en un shell bash para todos los commands?

Nota: hay una respuesta a una pregunta diferente que menciona la secuencia de escape echo -ne '\e[?7l' , pero parece que no funciona en bash.

¿Realmente necesitas tail -f o algo así como less +F do? Como parece que todavía quiere un buscapersonas interactivo, me parece que sería mucho más fácil quedarse con less de lo necesario para reimplantar uno.

Una nota final: has considerado el tail -f file | less tail -f file | less ?

Tratar:

less -S +F filename

  • Presione Ctrl c para detener el seguimiento y ahora puede mover hacia la izquierda y la derecha usando las teclas del cursor.
  • Presiona Shift f para reanudar el seguimiento
  • Presione Ctrl c , q para salir

Supongamos que tiene definida la variable COLUMNS , puede ejecutar

 tail -f your-app.log | cut -c -$COLUMNS 

de lo contrario, sustituya $COLUMNS por el ancho de las columnas del terminal, como lo obtiene stty -a .

El terminador (http://software.jessies.org/terminator/) emulador de terminal no permite arrollar líneas largas y tiene desplazamiento horizontal (pero está escrito en Java).

Dos buenas respuestas / ejemplos aquí

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) 

Una advertencia: al less en la terminal incorporada en mi Mac, el corte no parece manejar muy bien los tabuladores. Parece que los muestra con, por ejemplo, 8 espacios, pero solo los calcula como de 4 espacios o algo así. En otras palabras, si su terminal tiene 80 caracteres de ancho y su salida contiene varias tabs por línea, debe establecer el ancho a tal vez 60 o algo así. YMMV.

Use las siguientes opciones con less . Deshabilitará el ajuste de palabras y conservará los colors del text, si se especifica.

less -SR +F filename

Hay muchos comentarios que se apartan de la pregunta. La pregunta de OP era

Pero ahora necesito usar tail -f , y también la línea envuelve la salida. ¿Es posible desactivar el ajuste de línea en un shell bash para todos los commands?

Se hicieron algunos comentarios sobre la function de envoltura automática, indicando que no todas las terminales lo tienen. Quizás. Pero (aparte de terminator , cuyos desarrolladores no documentan ninguna descripción de terminal ) todos los ejemplos dados fueron xterm, rxvt y algunos similares o descendientes. Esos son todos relacionados.

La opción +aw en xterm corresponde al recurso autoWrap . Consultando el manual, dice 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". 

y en XTerm Control Sequences dice

 CSI ? Pm h ... DEC Private Mode Set (DECSET). Ps = 7 -> Wraparound Mode (DECAWM). 

que ciertamente no "depende de su elección de terminal", ya que cualquier terminal con compatibilidad VT100 admite la característica. xterm y rxvt hacen esto, por ejemplo. Los otros también lo hacen.

Si la característica sería útil para OP es discutible. Suprimir el ajuste de línea es solo un aspecto del problema:

  • El intérprete de commands conoce el ancho del terminal, pero eso puede anularse al establecer COLUMNS en un valor "grande".
  • Por supuesto, eso significa que las aplicaciones gastarán mucho time escribiendo en el margen derecho (y algunas, al equivocarse, comenzarán una nueva línea de todos modos).
  • OP probablemente asumió que la aplicación se desplazaría hacia la izquierda / derecha para hacer que la amplia terminal se pueda utilizar. (terminator hace esto, en parte, pero sus otros inconvenientes lo cancelan, excepto aquellos que solo usan el terminal para registrar un file de logging en la pantalla).
  • Lo que realmente busca OP es un set de herramientas que se puede decir que deshabiliten el ajuste de línea, especialmente para ver files de logging. Si la terminal funciona lo suficientemente bien como para un uso general, es irrelevante para la elección de las herramientas que se utilizan dentro de la terminal.

Hay localizadores que pueden hacer lo que se necesita, por ejemplo, multitail que enumera en sus características

El ajuste de línea se puede desactivar, después de eso se puede desplazar hacia la izquierda / derecha con las teclas del cursor

Al estar basado en ncurses, debería funcionar en cualquiera de los terminales citados.

Finalmente encontré una buena respuesta del superusuario , que funciona de la caja para gnome-terminal , y probablemente para otras terminales también:

 setterm -linewrap off 

enter image description here

Hay unos pocos ejemplos en esta página que conectan la queue con -f … de mis testings, no funciona correctamente, si realmente necesita tuberías (por ejemplo, si necesita conectar algo más, como grep), puede usar algo como :

 watch -n 1 'tail -n $(($LINES-3)) file.log | cut -c -$COLUMNS' 

no es el mejor para el performance, pero funciona … de lo contrario, puede usar algo diferente como:

 less -S +F file.log 

Si realmente desea ver las líneas completas, puede copyr y pegar el text en un editor de text como Atom o Notepad ++ y desactivar las modificaciones de línea allí.