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:
bash
, sh
y csh
) vt100
y xterm-color
) UTF-8
y ascii
) 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