Bash “读取”命令在一行中最多可以包含多少个字符

Bash “读取”命令在一行中最多可以包含多少个字符,bash,shell,unix,Bash,Shell,Unix,我有下面的shell脚本从终端读取行 #!/bin/bash while read line do if [ -z ${line} ] then break fi echo ${line} done 我不能输入超过256个字符。终端不允许我这样做,所以终端不会打印超过256个字符的任何内容,甚至不会打印新行。它只允许退格 $ ./echo.sh wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww

我有下面的shell脚本从终端读取行

#!/bin/bash

while read line
do
if [ -z ${line} ]
then
    break
fi
echo ${line}
done
我不能输入超过256个字符。终端不允许我这样做,所以终端不会打印超过256个字符的任何内容,甚至不会打印新行。它只允许退格

$ ./echo.sh
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
我正在使用 solaris 10操作系统 使用的端子是油灰 bash版本3.2.52


这是bash或putty中的限制吗?我知道如何将输入分成几行,但我需要知道是否有办法克服为读取命令输入的最大字符数,这是操作系统终端驱动程序中的限制

我们通常认为这是理所当然的,但当您输入hiello并按enter键时,该过程只显示hello

终端驱动程序通过将行存储在内存中,然后在按Backspace键时删除缓冲区中的最后一个字符来实现这一点。 用于此操作的缓冲区具有一定的人类规模大小。在Linux上,它是4096字节,用于比较

您可以通过禁用行编辑来解决此问题:

stty -icanon

read现在将一次读取更多数据,但如果按Backspace,应用程序将实际读取一个Backspace字符,而不是最后一行。

这是操作系统终端驱动程序的限制

我们通常认为这是理所当然的,但当您输入hiello并按enter键时,该过程只显示hello

终端驱动程序通过将行存储在内存中,然后在按Backspace键时删除缓冲区中的最后一个字符来实现这一点。 用于此操作的缓冲区具有一定的人类规模大小。在Linux上,它是4096字节,用于比较

您可以通过禁用行编辑来解决此问题:

stty -icanon

read现在将一次读取更多数据,但如果按Backspace,应用程序将实际读取一个Backspace字符,而不是最后一行。

@Krisrove-您链接的问题是命令行的长度,而不是read命令的输入长度。虽然这可能是重复的,但我不认为这与您链接到的问题是重复的。@vibz,您使用的是什么操作系统和bash版本?我无法复制你的问题。你能澄清我不能进入的意思吗?你有什么错误吗?如果是这样的话,会出现什么错误?是的,正如@ghoti所说,这是关于read命令输入长度的限制,而不是关于可以键入的命令的最大长度作为一个不相关的旁白,[-z$line]不会做你认为它会做的事情;改用[-z$line]。当line变量为空时,[-z$line]变为[-z],相当于[-n-z],因此返回true的原因完全错误。此外,如果设置line='foo-o1=1',当被测试的变量根本不是空的时候,您会看到真实的返回。这一类的虫子都会被抓到;请考虑使用习惯用法。@ TrPress,建议的DUPE似乎处理命令行参数列表长度,而不是读取读取的终端内容。我遗漏了什么吗?@krisroof-你链接的问题是命令行的长度,而不是read命令的输入长度。虽然这可能是重复的,但我不认为这与您链接到的问题是重复的。@vibz,您使用的是什么操作系统和bash版本?我无法复制你的问题。你能澄清我不能进入的意思吗?你有什么错误吗?如果是这样的话,会出现什么错误?是的,正如@ghoti所说,这是关于read命令输入长度的限制,而不是关于可以键入的命令的最大长度作为一个不相关的旁白,[-z$line]不会做你认为它会做的事情;改用[-z$line]。当line变量为空时,[-z$line]变为[-z],相当于[-n-z],因此返回true的原因完全错误。此外,如果设置line='foo-o1=1',当被测试的变量根本不是空的时候,您会看到真实的返回。这一类的虫子都会被抓到;请考虑使用习惯用法。@ TrPress,建议的DUPE似乎处理命令行参数列表长度,而不是读取读取的终端内容。我是不是遗漏了什么?谢谢你的回复。但这带来了一个新问题。Enter现在被读取为一个字符,如果[-z${line}]从未被执行,那么while循环将永远不会终止对应答的处理。但这带来了一个新问题。Enter现在被读取为一个字符,如果[-z${line}]从未被执行,则会离开,因此while循环从未终止