5 votos

Terminal de pegar no confiable

Estoy tratando de pegar el texto en la Terminal (v2.5 construir 343, estoy corriendo Yosemite), y parece que constantemente omitir caracteres.

Por ejemplo, si yo copie el texto siguiente en la mesa de trabajo:

1234567890,1234567890,1234567890,1234567890,1234567890,1234567890
1234567890,1234567890,1234567890,1234567890,1234567890,1234567890
1234567890,1234567890,1234567890,1234567890,1234567890,1234567890
1234567890,1234567890,1234567890,1234567890,1234567890,1234567890
1234567890,1234567890,1234567890,1234567890,1234567890,1234567890
1234567890,1234567890,1234567890,1234567890,1234567890,1234567890
1234567890,1234567890,1234567890,1234567890,1234567890,1234567890
1234567890,1234567890,1234567890,1234567890,1234567890,1234567890
1234567890,1234567890,1234567890,1234567890,1234567890,1234567890
1234567890,1234567890,1234567890,1234567890,1234567890,1234567890
1234567890,1234567890,1234567890,1234567890,1234567890,1234567890
1234567890,1234567890,1234567890,1234567890,1234567890,1234567890
1234567890,1234567890,1234567890,1234567890,1234567890,1234567890
1234567890,1234567890,1234567890,1234567890,1234567890,1234567890
1234567890,1234567890,1234567890,1234567890,1234567890,1234567890
1234567890,1234567890,1234567890,1234567890,1234567890,1234567890
1234567890,1234567890,1234567890,1234567890,1234567890,1234567890

Luego en el Buscador de Editar -> Mostrar Portapapeles puedo comprobar que el texto es todo lo que hay.

A continuación me abre el Terminal y teclea:

cat > test

A continuación, pegue el texto anterior y presione Ctrl+d.

En la pantalla me sale esto:

1234567890,1234567890,1234567890,1234567890,1234567890,1234567890
1234567890,1234567890,1234567890,1234567890,1234567890,1234567890
1234567890,1234567890,1234567890,1234567890,1234567890,1234567890
1234567890,1234567890,1234567890,1234567890,1234567890,1234567890
1234567890,1234567890,1234567890,1234567890,1234567890,1234567890
1234567890,1234567890,1234567890,1234567890,1234567890,1234567890
1234567890,1234567890,1234567890,1234567890,1234567890,1234567890
1234567890,1234567890,1234567890,1234567890,1234567890,1234567890
1234567890,1234567890,1234567890,1234567890,1234567890,1234567890
1234567890,1234567890,1234567890,1234567890,1234567890,1234567890
1234567890,1234567890,1234567890,1234567890,1234567890,1234567890
1234567890,1234567890,1234567890,1234567890,1234567890,1234567890
1234567890,1234567890,1234567890,1234567890,1234567890,1234567890
1234567890,1234567890,1234567890,1234567890,1234567890,1234567890
1234567890,1234567890,1234567890,1234567890,1234567890,1234567890
1234567890,12345678,1234567890,1234567890,1234567890
1234567890,1234567890,1234567890,1234567890,1234567890,1234567890

pero el contenido del archivo "prueba" que coincida con el original texto que he copiado a la mesa de trabajo.

¿Hay alguna razón por la Terminal dejaría de caracteres cuando haciendo eco a la pantalla durante una operación de pegar?

3voto

Michael Gagnon Puntos 41

Stdout en este caso es la línea de búfer y es de 1024 bytes, lo que está provocando la salida de truncamiento en la pantalla. Al pegar desde el portapapeles a la no-imprimible de Nueva Línea (EOL) caracteres al final de cada línea son simplemente cuenta como otro personaje en la línea en cuanto al recuento de búfer se refiere. La razón de que las matemáticas no cuadran, por donde el truncamiento sucede que @miken32 estaba tratando de calcular, es porque no estás contando la Nueva Línea de caracteres.

Si gato el archivo de prueba utilizando una opción –e se puede ver el no imprimible de la EOL, personajes como $, incluyendo en las matemáticas que se debe agregar.

$ cat -e test
1234567890,1234567890,1234567890,1234567890,1234567890,1234567890$
1234567890,1234567890,1234567890,1234567890,1234567890,1234567890$
1234567890,1234567890,1234567890,1234567890,1234567890,1234567890$
1234567890,1234567890,1234567890,1234567890,1234567890,1234567890$
1234567890,1234567890,1234567890,1234567890,1234567890,1234567890$
1234567890,1234567890,1234567890,1234567890,1234567890,1234567890$
1234567890,1234567890,1234567890,1234567890,1234567890,1234567890$
1234567890,1234567890,1234567890,1234567890,1234567890,1234567890$
1234567890,1234567890,1234567890,1234567890,1234567890,1234567890$
1234567890,1234567890,1234567890,1234567890,1234567890,1234567890$
1234567890,1234567890,1234567890,1234567890,1234567890,1234567890$
1234567890,1234567890,1234567890,1234567890,1234567890,1234567890$
1234567890,1234567890,1234567890,1234567890,1234567890,1234567890$
1234567890,1234567890,1234567890,1234567890,1234567890,1234567890$
1234567890,1234567890,1234567890,1234567890,1234567890,1234567890$
1234567890,1234567890,1234567890,1234567890,1234567890,1234567890$
1234567890,1234567890,1234567890,1234567890,1234567890,1234567890$

Usted puede conseguir alrededor de llenar el buffer de línea con pega bytes si se especifica su propio fin de archivo (EOF), marcador con el comando cat. De esta manera, cuando el comando cat se encuentra con la EOL personajes se restablece el buffer de línea al principio de cada nueva línea en lugar de solo contar como otro byte en una corriente continua debido a que el comando cat es el análisis de cada nueva línea buscando la EOF de la cadena en una línea por sí mismo para saber cuándo salir.

Usted puede hacer algo como esto :

cat << EOF > test

El stdin redirect (<< EOF) le dice a cat para continuar imprimiendo hasta que se encuentra la entrada de la coincidencia de los especificados fin-de-archivo de caracteres en una línea nueva por sí mismos. De esta manera stdout a continuación, imprime cada pegado carácter imprimible línea por línea, el inconveniente es que se obtiene un carácter ">" en la salida en el comienzo de cada nueva línea.

$ cat << EOF > test
> 1234567890,1234567890,1234567890,1234567890,1234567890,1234567890
> 1234567890,1234567890,1234567890,1234567890,1234567890,1234567890
> 1234567890,1234567890,1234567890,1234567890,1234567890,1234567890
> 1234567890,1234567890,1234567890,1234567890,1234567890,1234567890
> 1234567890,1234567890,1234567890,1234567890,1234567890,1234567890
> 1234567890,1234567890,1234567890,1234567890,1234567890,1234567890
> 1234567890,1234567890,1234567890,1234567890,1234567890,1234567890
> 1234567890,1234567890,1234567890,1234567890,1234567890,1234567890
> 1234567890,1234567890,1234567890,1234567890,1234567890,1234567890
> 1234567890,1234567890,1234567890,1234567890,1234567890,1234567890
> 1234567890,1234567890,1234567890,1234567890,1234567890,1234567890
> 1234567890,1234567890,1234567890,1234567890,1234567890,1234567890
> 1234567890,1234567890,1234567890,1234567890,1234567890,1234567890
> 1234567890,1234567890,1234567890,1234567890,1234567890,1234567890
> 1234567890,1234567890,1234567890,1234567890,1234567890,1234567890
> 1234567890,1234567890,1234567890,1234567890,1234567890,1234567890
> 1234567890,1234567890,1234567890,1234567890,1234567890,1234567890
> EOF

El fin-de-archivo de marcador se escribe literalmente como los personajes E, O, F, después de su pasta y puede ser cualquier cosa que te gusta. También la EF personajes, y los > caracteres no están incluidos en el redirige la salida se envía al archivo. Escribir las letras como EF es sólo simbólico y puede ser cualquier cosa que te gusta, XXX por ejemplo, usted sólo tiene que tener la certeza de que lo que nunca EF marcador especifique no aparecen en el buffer.

Para el registro, usted puede todavía utilizar ^D como el EF marcador cuando se utiliza la entrada estándar, aunque especifique otra cosa. El uso de la EF cadena es una vieja escuela de secuencias de comandos convenio para delimitar un bloque de texto para redirigir desde dentro de la secuencia de comandos.

Espero que esto ayude.

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