gpt4 book ai didi

Linux 读取 - x 秒后超时*空闲*

转载 作者:太空狗 更新时间:2023-10-29 11:12:17 25 4
gpt4 key购买 nike

我在服务器上有一个 (bash) 脚本,我继承了它的管理方面,最近发现脚本中的一个缺陷,没有人引起我的注意。

发现问题后,其他人都跟我说这让他们很恼火,但从来没有告诉过我(太棒了。。。)

所以,脚本遵循这个概念

#!/bin/bash
function refreshscreen(){
# This function refreshes a "statistics screen"
...
echo "Enter command to override update"
read -t 10 variable
}

此脚本刷新统计屏幕,并允许用户暂停更新以代替内置于 case 语句中的命令。但是,读取超时 (read -t 10) 10 秒后,无论用户是否正在键入。

长话短说,如果用户主动输入命令,是否有办法防止读取超时?最好的情况是“SEC 空闲/不活动秒超时”,而不是 x 秒后超时。

我考虑过在读取命令暂停屏幕以检查不活动之前在循环结束时运行后台脚本,但还没有找到使该命令起作用的方法。

最佳答案

您可以在循环中使用read,一次读取一个字符,并将其添加到最终读取的字符串中。这将为用户提供一些超时时间每个字符,而不是每个命令。这是一个示例函数,您可以将其合并到您的脚本中,以显示我在说什么:

read_with_idle_timeout() {
local input=""

read -t 10 -N 1 variable

while [ ! -z $variable ]
do
input+=$variable
read -t 10 -N 1 variable
done

echo "Read: $input"
}

这会给用户 10 秒的时间来键入每个字符。如果他们停止输入,您将获得与他们在超时发生之前开始输入的命令一样多的命令,然后您的 case 语句可以处理它。也许您可以将最终字符串存储在一个全局变量中,或者直接将此代码放入您的其他函数中。

如果您需要多个单词,因为 read$IFS 上中断,您可以多次调用此函数,直到获得您期望的所有输入。

关于Linux 读取 - x 秒后超时*空闲*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45270889/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com