Salida incorrecta de Terminal.app para líneas largas con tabs

Cuando ejecuto el siguiente command en Terminal.app:

echo -e "a\tb\tc\td\te\tf\tg\tyo" 

Debería get el siguiente resultado (utilizando una window de 40 columnas para que las líneas no se envuelvan aquí y reemplazando las tabs con espacios para que se muestre la cantidad correcta de espacio aquí):

 abcdefg yo 

Pero, en cambio, obtengo esta salida:

 abcdey o 

Como puede ver, faltan las f y las g .

Después de probar varias cadenas, creo que el problema es que una pestaña al final de una línea no avanza la salida a la línea siguiente, sino que deja al cursor de salida un carácter antes del final de la línea. Por ejemplo (suponiendo aún un terminal de 40 columnas), 4 tabs colocan el cursor en la position 32 de la línea 1. Otra pestaña debe colocar el cursor en la position 0 de la línea 2, pero el cursor está en la position 39 de la línea 1, dejando espacio para imprimir un personaje más, e incluso en ese punto, el cursor no avanza a la siguiente línea, por lo que otra pestaña nos devolverá a la position 39. Por lo tanto, un número ilimitado de cadenas (de un solo carácter + pestaña) será ignorado silenciosamente

He experimentado con una variedad de:

  • conchas (incluyendo bash , sh y csh )
  • Anchos de terminal (incluyendo 40 columnas, 80 y muchos otros)
  • types de terminales (incluidos vt100 y xterm-color )
  • codificaciones de caracteres de terminal (incluidas UTF-8 y ascii )
  • configuration de terminal (incluida la input de Escape non-ASCII input )

Además, un amigo ejecutó commands similares en un sistema Linux con un terminal diferente, y no encontró el mismo error.

¿Alguien sabe como arreglar esto? Estaría muy agradecido, ya que este error dificulta la debugging de algunas secuencias de commands de shell caseras que se ejecutan en files separados por tabuladores.

Esto tiene que ver con los saltos de línea. La terminal está buscando ya sea un espacio, o una cadena continua de caracteres para hacer un salto de línea. En este caso, la primera oportunidad que ve de romper la línea es entre el y y el o. La "y" se muestra porque el último carácter en una línea extendida se muestra en el último lugar para indicar al usuario que algo está sucediendo allí.

Soluciones temporales …

Tu podrías intentar:

 echo -e "a \tb \tc \td \te \tf \tg \tyo" 

y todo aparecerá como lo esperarías.

también algo así como

 echo -e "ab\tcd\tef\tgh\tij\tkl\tmn\tyo" 

debería romperse entre la "k" y la "l"

Aún así, este es un comportamiento extraño y merece la pena un informe de errores / radar

    Intereting Posts