我有一个旧的shell脚本需要移动到bash.此脚本打印某些活动的进度并等待用户的命令.如果用户未执行任何操作15秒,则会重新绘制屏幕并显示新进度并再次启动计时器.这是我的问题:
我试图使用read -t 15 myVar – 这种方式在15秒的等待循环后将重新启动.然而,有一个场景给我带来了一个问题:
>屏幕重绘和脚本等待输入(打印’输入命令:’)
>用户输入foo但不按Enter键
> 15秒后屏幕再次重绘并且脚本等待输入 – 注意,foo不会显示在屏幕上的任何位置(打印’输入命令:’)
>用户输入bar并按Enter键
此时变量$myVar持有’foobar’.
我需要什么?我正在寻找一种方法来查找用户输入的第一个字符串,因此我可以在刷新状态后重新显示它.这样用户会看到:
输入命令:foo
在Solaris上我可以使用stty -pendin将输入保存到某种缓冲区中,并在刷新后运行stty pendin以从缓冲区获取此输入并将其打印在屏幕上.
有一个Linux相当于stty pendin功能吗?或许你知道我的问题的一些bash解决方案?
解决方法:
我猜一种方法是手动累积用户输入…使用带-n1的读取使得它在每个字符后返回,然后你可以将它添加到你的字符串中.为了防止过度绘制,你必须计算15秒钟的剩余秒数……
附录:
有关空间/返回的注释 – 您基本上想要使用没有所需字符的IFS,例如空格
例:
XIFS="${IFS}" # backup IFS
IFS=$'\r' # use a character your user is not likely to enter (or just the same but w/o the space)
# Enter will look like en empty string
$read -n1 X; echo --; echo -n "${X}" | od -tx1
--
0000000
# space will be presented as a character
$read -n1 X; echo --; echo -n "${X}" | od -tx1
--
0000000 20
0000001
# after you are all done, you probably wantto restore the IFS
IFS="${XIFS}"
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。