Ввод терминала в Linux: чтение пользовательского ввода из усеченных строк терминала в пределе 4095 символов
В скрипте bash я пытаюсь прочитать строки из стандартного ввода, используя встроенныеread
команда после настройкиIFS=$'\n'
, Строки усекаются до предела 4095 символов, если я вставляю ввод в чтение. Это ограничение, кажется, исходит от чтения из терминала, потому что это работало отлично:
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)
Я испытываю такое же поведение со скриптом Python (не принимал более 4095 входных данных из терминала, но принимал из конвейера):
#!/usr/bin/python
from sys import stdin
line = stdin.readline()
print('%s' % line)
Даже программа на C работает так же, используя:read(2)
#include
#include
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;
}
Во всех случаях я не могу ввести более 4095 символов. Подсказка ввода перестает принимать символы.
Вопрос 1: Есть ли способ интерактивного чтения с терминала длиннее 4095 символов в системах Linux (по крайней мере, Ubuntu 10.04 и 13.04)?
Вопрос 2: Откуда это ограничение?
Затрагиваемые системы: Я заметил это ограничение в Ubuntu 10.04 / x86 и 13.04 / x86, но Cygwin (по крайней мере, последняя версия) еще не усекается до более чем 10000 символов (больше не тестировал, так как мне нужно, чтобы этот скрипт работал в Ubuntu). Используемые терминалы: виртуальная консоль и KDEkonsole
(Ubuntu 13.04) иgnome-terminal
(Ubuntu 10.04).