Wejście terminalu Linux: odczyt danych wejściowych użytkownika z linii obcięcia terminala przy limicie 4095 znaków

W skrypcie bash próbuję czytać linie ze standardowego wejścia, używając wbudowanegoread polecenie po ustawieniuIFS=$'\n'. Linie są obcinane przy limicie 4095 znaków, jeśli wkleję dane wejściowe do odczytu. To ograniczenie wydaje się wynikać z odczytu z terminala, ponieważ działało to doskonale:

fill=
for i in $(seq 1 94); do fill="${fill}x"; done
for i in $(seq 1 100); do printf "%04d00$fill" $i; done | (read line; echo $line)

Doświadczam tego samego zachowania ze skryptem Pythona (nie akceptowałem danych dłuższych niż 4095 z terminala, ale akceptowanych z potoku):

#!/usr/bin/python

from sys import stdin

line = stdin.readline()
print('%s' % line)

Nawet program C działa tak samo, używającread(2):

#include <stdio.h>
#include <unistd.h>

int main(void)
{
    char buf[32768];
    int sz = read(0, buf, sizeof(buf) - 1);
    buf[sz] = '\0';
    printf("READ LINE: [%s]\n", buf);
    return 0;
}

We wszystkich przypadkach nie mogę wprowadzić więcej niż około 4095 znaków. Polecenie wprowadzania przestaje akceptować znaki.

Pytanie 1: Czy istnieje sposób na interaktywne czytanie z terminala dłuższego niż 4095 znaków w systemach Linux (przynajmniej Ubuntu 10.04 i 13.04)?

Pytanie 2: Skąd pochodzi to ograniczenie?

Dotyczy systemów: Zauważyłem to ograniczenie w Ubuntu 10.04 / x86 i 13.04 / x86, ale Cygwin (przynajmniej najnowsza wersja) nie obcina jeszcze ponad 10000 znaków (nie testowałem dalej, ponieważ muszę uzyskać ten skrypt działający w Ubuntu). Użyte terminale: Virtual Console i KDEkonsole (Ubuntu 13.04) ignome-terminal (Ubuntu 10.04).

questionAnswers(3)

yourAnswerToTheQuestion