什么是字符'read'命令的最大数量可以在一行中占用

时间:2017-05-03 02:11:20

标签: bash shell unix

我有以下shell脚本来读取终端

中的行
#!/bin/bash

while read line
do
if [ -z ${line} ]
then
    break
fi
echo ${line}
done

我输入的字符数不能超过256个。终端不允许我这样做(终端不打印超过256个字符的内容,甚至不打印新行。只允许它退格)

$ ./echo.sh
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
我正在使用 solaris 10 OS 使用的终端是腻子 bash版本3.2.52

这是bash或putty的限制吗?我知道要将我的输入分成几行,但我需要知道是否有办法克服为读取命令输入的最大字符数作为输入

1 个答案:

答案 0 :(得分:6)

这是OS终端驱动程序的限制。

我们通常认为它完全是理所当然的,但是当您输入hi<Backspace>ello并按Enter键时,该过程只会显示hello

终端驱动程序通过将行存储在内存中,然后在按 Backspace 时删除该缓冲区中的最后一个字符来实现。 用于此的缓冲区具有一些人体尺寸。在Linux上,它是4096字节,用于比较。

你可以通过禁用行编辑来解决这个问题:

stty -icanon

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