terminal kesiliyor hatlarından kullanıcı girişi okurken, ben yerleşik read
komuta IFS=$'\n'
ayarladıktan sonra kullanarak, standart girdiden satırları okumaya çalışın. Girişe okuma yapıştırırsam satırlar 4095 karakter sınırında kısaltılır. Bu sınırlama, bu mükemmel iyi çalıştı çünkü terminalden okumasını geliyormuş gibi: Linux terminali girişi: Bir bash komut dosyasında 4095 karakter sınırı
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)
Ben Python komut da aynı davranış (terminalden 4095 giriş daha uzun kabul etmedi, ancak boru kabul):
#!/usr/bin/python
from sys import stdin
line = stdin.readline()
print('%s' % line)
Hatta C programı read(2)
kullanarak, aynı şekilde çalışır: her durumda
#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;
}
, ben yaklaşık 4095 karakterden uzun giremez. Giriş istemi, karakterleri kabul etmeyi durdurur.
Soru-1: Linux sistemlerinde (en az Ubuntu 10.04 ve 13.04) 4095 karakterden daha uzun bir uçtan etkileşimli olarak okunmanın bir yolu var mı?
Soru-2: bu sınırlama geliyor?
Sistemleri etkilenen: Ben Ubuntu 10.04/x86 ve 13.04/x86 Bu sınırlamayı fark ettim, ama Cygwin (son versiyon en azından) 10000 üzerinde karakterden (Bunu almak gerekir çünkü daha ileri test etmedi henüz kesecek değil Ubuntu'da çalışan betik). kullanılan Terminaller: Sanal Konsol ve KDE konsole
(Ubuntu 13.04) ve gnome-terminal
(Ubuntu 10.04).
Evet, boru için böyle bir sınırlama var ve aslında etkileşimli olmadığını fark etmekle alakalı. sürüm boruları kullanır ve gerekliliğe göre _several yazıyor ve reads_. Ama bence bu sınır terminal girişini etkilememelidir (terminaller boru değildir). – FooF