Linux-terminal-Eingang: Lesen der Benutzer eine Eingabe vom terminal mit dem abschneiden von Linien zu 4095 Zeichen limit

In ein bash-script, ich versuche zum Lesen von Zeilen von der Standardeingabe, mit built-in read Befehl nach Einstellung IFS=$'\n'. Die Zeilen abgeschnitten sind, an 4095 Zeichen limit, wenn ich einfügen-Eingang zu Lesen. Diese Einschränkung scheint zu kommen aus dem Lesen vom terminal, denn dieser arbeitet völlig in Ordnung:

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)

Erlebe ich das gleiche Verhalten mit einem Python-Skript (nicht akzeptieren länger als 4095 Eingabe vom terminal, aber akzeptiert, von Rohr):

#!/usr/bin/python

from sys import stdin

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

Sogar C-Programm funktioniert auf die gleiche, mit read(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;
}

In allen Fällen, ich kann nicht geben Sie mehr als 4095 Zeichen. Der Eingabe-prompt Stoppt annehmen Zeichen.

Frage-1: gibt es eine Möglichkeit, interaktiv Lesen vom terminal länger als 4095 Zeichen in Linux-Systemen (mindestens Ubuntu 10.04 und 13.04)?

Frage-2: Woher diese Einschränkung kommt?

Betroffene Systeme: ich bemerkte, dass diese Einschränkung in Ubuntu 10.04/x86 und 13.04/x86, aber Cygwin (aktuelle version zumindest) nicht abgeschnitten noch auf über 10000 Zeichen (nicht weiter testen, da die ich brauche, um dieses Skript funktioniert in Ubuntu). Terminals verwendet: Virtuelle Konsole und KDE konsole (Ubuntu 13.04) und gnome-terminal (Ubuntu 10.04).

InformationsquelleAutor FooF | 2013-08-02
Schreibe einen Kommentar