在一个bash脚本中,我尝试从标准输入读取行,使用内置的
我用 Python 脚本也遇到了同样的问题(无法从终端接受超过 4095 字节的输入,但可以从管道接受)。
read
命令并设置IFS=$'\n'
。如果我将输入粘贴到read中,行会被截断为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 <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;
}
在所有情况下,我不能输入超过大约4095个字符。输入提示停止接受字符。
问题1:是否有办法在Linux系统(至少Ubuntu 10.04和13.04)中从终端交互式读取超过4095个字符的内容?
问题2:这个限制来自哪里?
受影响的系统:我注意到这个限制在Ubuntu 10.04/x86和13.04/x86中存在,但是Cygwin(最近版本至少)在超过10000个字符时仍不截断(由于我需要让这个脚本在Ubuntu中工作,所以没有进一步测试)。使用的终端:Virtual Console和KDE konsole
(Ubuntu 13.04)和gnome-terminal
(Ubuntu 10.04)。