在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)
Run Code Online (Sandbox Code Playgroud)
我在Python脚本中遇到了相同的行为(不接受来自终端的4095输入,但是从管道接受):
#!/usr/bin/python
from sys import stdin
line = stdin.readline()
print('%s' % line)
Run Code Online (Sandbox Code Playgroud)
即使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;
}
Run Code Online (Sandbox Code Playgroud)
在所有情况下,我输入的时间不能超过4095个字符.输入提示停止接受字符.
问题1:有没有办法以交互方式从Linux系统(至少Ubuntu 10.04和13.04)中读取超过4095个字符的终端?
问题2:此限制来自何处?
受影响的系统: …