Salida de Terminal.app incorrecta para líneas largas con pestañas

6

Cuando ejecuto el siguiente comando en Terminal.app:

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

Debería obtener la siguiente salida (usando una ventana de 40 columnas para que las líneas no se ajusten aquí, y reemplazando las pestañas con espacios para que se muestre la cantidad correcta de espacio aquí):

a       b       c       d       e       
f       g       yo

Pero en su lugar, obtengo esta salida:

a       b       c       d       e       y
o

Como puede ver, faltan f y 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 siguiente línea, sino que deja al cursor de salida un carácter antes de que finalice la línea. Por ejemplo (aún suponiendo un terminal de 40 columnas), 4 pestañas colocan el cursor en la posición 32 de la línea 1. Otra pestaña debe colocar el cursor en la posición 0 de la línea 2, pero en cambio, el cursor está en la posición 39 de la línea 1, dejando espacio para que se imprima un carácter más, e incluso en ese punto, el cursor no avanza a la siguiente línea, por lo que otra pestaña nos regresará a la posición 39. Por lo tanto, hay un número ilimitado de cadenas (de un solo carácter + pestaña) será ignorado en silencio.

He experimentado con una variedad de:

  • shells (incluidos bash , sh y csh )
  • anchos de terminal (incluidas 40 columnas, 80 y muchas otras)
  • tipos de terminales (incluidos vt100 y xterm-color )
  • codificaciones de caracteres terminales (incluidos UTF-8 y ascii )
  • configuración del terminal (incluido Escape non-ASCII input )

Además, un amigo ejecutó comandos 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 hace que sea difícil depurar algunos scripts de shell hechos en casa que se ejecutan en archivos separados por pestañas.

    
pregunta Jeff Terrell Ph.D. 28.11.2012 - 22:04

1 respuesta

1

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

Soluciones ...

Puedes intentarlo:

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

y todo aparecerá como esperarías.

también algo como

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

debería interrumpirse entre "k" y "l"

Este es un comportamiento extraño y definitivamente vale la pena un informe de error / radar

    
respondido por el sdmeyers 21.02.2013 - 13:52

Lea otras preguntas en las etiquetas