El terminal no acepta líneas pegadas o tipadas de más de 1024 caracteres

Cuando ingreso text en stdin en una terminal OS X, una sola línea está limitada a 1024 caracteres. Por ejemplo, cat > /dev/null emite un pitido después de escribir (o pegar) una línea más larga que esta, y se niega a aceptar más caracteres. Un ejemplo problemático es cuando quiero contar caracteres del text pegado con cat | wc -c cat | wc -c : el cat bloquea en la primera línea larga.

Esto parece ser un problema general al pegar a stdin. ¿Se puede eliminar o llevar a un límite superior esta limitación estándar de 1024 caracteres por línea?

Necesito esto porque quiero pegar text que tenga líneas de más de 1024 caracteres.

También podría usar un "henetworkingoc" << EOT y pegar mis líneas largas sin ningún problema, pero luego el text aparece en mi historial de shell, que no quiero.

Probablemente un límite de la disciplina de la línea del dispositivo terminal buffer de línea interna.

Debería poder ingresar líneas largas presionando Ctrl + D en el centro de la misma (para que la parte ingresada actualmente se envíe a cat y el editor de línea se vacíe), o deshabilitando ese editor de línea por completo.

Por ejemplo, si usa zsh :

 STTY=-icanon cat > file 

Tenga en count que no puede usar Retroceso ni ninguna otra capacidad de edición. También necesitarás presionar Ctrl-C para detener a cat .

Con otras conchas

 s=$(stty -g); stty -icanon; cat > file 

Seguido por:

 stty "$s" 

O solo:

 stty -icanon; cat > file stty sane 

Por supuesto, cosas como

 cat | wc -l 

o

 wc -l 

no funcionará Porque Ctrl + C elimina todos los processs en el grupo de processs en primer plano.

Podrías hacerlo:

 STTY=-icanon cat | (trap '' INT; wc -l) 

O como lo sugiere @mikeserv :

 STTY='eol " "' wc -l 

De esta forma, el búfer se downloadá cada vez que ingrese al espacio. Todavía está en modo canónico, por lo que aún puede editar palabras (en lugar de líneas) y usar Ctrl + D para indicar EOF.

O:

 STTY='-icanon min 0 time 30' wc -l 

EOF vendrá 3 segundos después de que dejes de escribir. O:

 STTY=-icanon sed -n '/^EOF$/q;p' | wc -l 

E ingrese EOF (las 3 letras en una línea en sí misma) para finalizar la input.

Según lo sugerido por Gilles , cuando sea posible (como en general no una session de telnet / ssh por ejemplo), use pbpaste lugar de pegar. (Eso está en OSX; en X11, llame a xsel o xclip ):

 pbpaste | wc -l 

Eso también evitará problemas con algunos caracteres de control (como ^C ) que pueden encontrarse en el búfer de copyr y pegar.