0

您好,我在 bash 中使用 read 来询问密码,并让 -s 隐藏输入并让 -t 10 超时,除了一件事外,所有工作都按预期工作。
这是代码(我正在使用数组开关):

read -t 10 -a mp -s -p "Enter Password:"

它隐藏输入,如果我不输入任何内容,它会在 10 秒内返回提示。
但是,如果我键入 12 个字符传递的前 10 个字符,并且它在返回时超时,它会显示我在下一行键入的字符。

例子:

DD-WRT-Bash:~# read -t 10 -a mp -s -p "Enter Password:"

(我类型测试123)

如果我没有按 Enter 并且超时,下一行是:

DD-WRT-Bash:~# testing123

它在 Ubuntu 中做同样的事情。
有没有办法阻止文本在下一行返回?

4

1 回答 1

0

我建议使用该-N选项来规避read仅消耗完整行输入的行为。

开始的描述-N如下:

-N nchars
read 在准确读取 nchars 字符后返回,
而不是等待完整的输入行,除非
遇到 EOF 或读取超时。

使用一个足够大的值,以使您的用户在超时似乎工作良好之前无法达到它:

read -t 10 -a mp -s -N 9999 -p "Enter Password:"

部分行将存储到数组中,并且不会在控制台的下一行输入中重现。

于 2020-08-04T17:31:26.697 回答