6 votos

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

Cuando yo ejecute el siguiente comando en la Terminal.aplicación:

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

Debo conseguir los siguientes resultados (usando una columna de 40 ventana para que las líneas no envuelva aquí, y colocación de pestañas con espacios para que la cantidad correcta de espacio se muestra aquí):

a       b       c       d       e       
f       g       yo

Pero en lugar de eso, me da este resultado:

a       b       c       d       e       y
o

Como se puede ver, el f y g faltan.

Después de intentar varias cadenas, creo que el problema es que una ficha al final de una línea no avanzar en la salida a la siguiente línea, sino que deja la salida de cursor un carácter antes de la línea final. Por ejemplo (aún suponiendo una columna de 40 terminal), 4 fichas coloca el cursor en la posición 32 de la línea 1. Otra ficha debe poner el cursor en la posición 0 de la línea 2, pero en lugar de que el cursor esté en la posición 39 de la línea 1, dejando espacio para uno más, el carácter para ser impresa-y aun en ese momento, el cursor no está avanzado a la siguiente línea, así que otra ficha nos pondrá de nuevo en la posición 39. Por lo tanto, un número ilimitado de (un solo carácter + tab) de las cuerdas será ignorado.

He experimentado con una variedad de:

  • conchas (incluyendo bash, shy csh)
  • terminal anchos (incluyendo 40 columnas, 80, y muchos otros)
  • tipos de terminales (incluyendo vt100 y xterm-color)
  • terminal de codificaciones de caracteres (incluyendo UTF-8 y ascii)
  • la configuración del terminal (incluyendo Escape non-ASCII input)

También, un amigo corrió similar comandos en un sistema Linux con un terminal diferente, y no encuentro el mismo error.

Alguien sabe cómo solucionar este problema? Yo estaría muy agradecido, ya que este error es lo que es quizás difícil de depurar algunos hechos en casa shell scripts que se ejecutan en la pestaña archivos separados.

1voto

sdmeyers Puntos 1356

Esto tiene que ver con los saltos de línea. La Terminal está buscando un espacio, o una constante de cadena de caracteres para hacer un salto de línea. En este caso la primera oportunidad que se ve para romper la línea entre la s y la o. La "y" se muestra debido a que el último carácter en una extensión de la línea se muestra en el último lugar para dar a entender al usuario de que algo está sucediendo allí.

Soluciones...

Puedes intentar:

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

y todo aparecerá como era de esperar.

también algo como

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

debe ruptura entre la "k" y "l"

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

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: