6 votos

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

Cuando ejecuto el siguiente comando en Terminal.app:

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

Debería obtener la siguiente salida (utilizando una ventana de 40 columnas para que las líneas no se enrollen aquí, y sustituyendo los tabuladores por 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, el f y g no están.

Después de probar varias cadenas, creo que el problema es que un tabulador al final de una línea no hace avanzar la salida a la siguiente línea, sino que deja el cursor de salida un carácter antes del final de la línea. Por ejemplo (todavía asumiendo un terminal de 40 columnas), 4 tabulaciones ponen el cursor en la posición 32 de la línea 1. Otro tabulador debería poner el cursor en la posición 0 de la línea 2, pero en su lugar 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 otro tabulador nos devolverá a la posición 39. Por lo tanto, un número ilimitado de cadenas (de un solo carácter + tabulador) serán ignoradas silenciosamente.

He experimentado con una variedad de:

  • conchas (incluyendo bash , sh y csh )
  • anchos de terminal (incluyendo 40 columnas, 80, y muchos otros)
  • tipos de terminales (incluyendo vt100 y xterm-color )
  • codificaciones de caracteres de los terminales (incluyendo UTF-8 y ascii )
  • ajustes del terminal (incluyendo 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 cómo arreglar esto? Se lo agradecería mucho, ya que este error está dificultando la depuración de algunos shell scripts caseros que se ejecutan en archivos separados por tabulaciones.

1voto

sdmeyers Puntos 1356

Esto tiene que ver con los saltos de línea. El terminal busca 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 de una línea extendida se muestra en el último lugar para dar una pista al usuario de que algo está sucediendo allí.

Soluciones...

Podrías intentarlo:

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

y todo aparecerá como se espera.

también algo como

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

debe romperse entre la "k" y la "l"

Sin embargo, este es un comportamiento extraño y definitivamente vale la pena un informe de error/radar

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X