相关疑难解决方法(0)

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)
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:此限制来自何处?

受影响的系统: …

linux terminal input

15
推荐指数
2
解决办法
6136
查看次数

标签 统计

input ×1

linux ×1

terminal ×1