【发布时间】:2017-05-03 11:52:29
【问题描述】:
我有以下 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 的限制?我知道将我的输入分成几行,但我需要知道是否有办法克服为读取命令输入的最大字符数作为输入
【问题讨论】:
-
@KrisRoofe - 您链接的问题是关于 命令行 的长度,而不是
read命令的输入长度。虽然这可能是重复的,但我不认为它与您链接的问题重复。 -
@vibz,您使用的是什么操作系统和 bash 版本?我无法复制您遇到的问题。你能澄清一下“我不能进入”是什么意思吗?你有什么错误吗?如果是这样,什么错误?
-
是的,正如@ghoti 所说,它是关于读取命令输入长度的限制,而不是关于可以输入的命令的最大长度
-
顺便说一句,
[ -z $line ]并没有按照您的想法去做;请改用[ -z "$line" ]。当你的行变量为空时,[ -z $line ]变为[ -z ],相当于[ -n -z ],所以完全错误的原因返回true。此外,如果设置了line='foo -o 1 = 1',当被测试的变量根本不为空时,你会看到一个真实的返回。 (这一类的bug会被shellcheck.net捕获;考虑习惯性地使用)。 -
@tripleee,建议的欺骗似乎是在处理命令行参数列表长度,而不是
read使用的终端内容。我错过了什么吗?