Bash 超时后终止tail命令
我正在使用Bash 超时后终止tail命令,bash,shell,Bash,Shell,我正在使用tail-f file\u name在文件中捕获标准输出(日志),以使用grep和sed保存特定字符串(以退出尾部): 这可以正常工作,但我想终止该命令,以防它在一段时间后在日志文件中找不到模式(INFO) 我想在超时(60秒)后退出脚本,类似这样的操作(不起作用): 有什么建议吗?因为您只想捕获一行: #!/bin/bash IFS= read -r -t 60 line < <(tail -f log.txt | awk '/INFO/ { print; exit; }
tail-f file\u name
在文件中捕获标准输出(日志),以使用grep
和sed
保存特定字符串(以退出尾部):
这可以正常工作,但我想终止该命令,以防它在一段时间后在日志文件中找不到模式(INFO
)
我想在超时(60秒)后退出脚本,类似这样的操作(不起作用):
有什么建议吗?因为您只想捕获一行:
#!/bin/bash
IFS= read -r -t 60 line < <(tail -f log.txt | awk '/INFO/ { print; exit; }')
printf '%s\n' "$line" >info_file.txt
请注意:
是bash中的一个内置变量,读取该变量时,将检索自shell启动以来的时间(以秒为单位)。(在成为任何赋值的目标后,它将失去这种行为——避免此类错误是为什么保留小写字符的名称供应用程序使用是有价值的一部分)SECONDS
创建一个算术上下文;其中的所有内容都被视为整数数学(())
因为您只想捕获一行:
#!/bin/bash IFS= read -r -t 60 line < <(tail -f log.txt | awk '/INFO/ { print; exit; }') printf '%s\n' "$line" >info_file.txt
请注意:
是bash中的一个内置变量,读取该变量时,将检索自shell启动以来的时间(以秒为单位)。(在成为任何赋值的目标后,它将失去这种行为——避免此类错误是为什么保留小写字符的名称供应用程序使用是有价值的一部分)SECONDS
创建一个算术上下文;其中的所有内容都被视为整数数学(())
这似乎对我有用
read -t 60 < <(tail -f log.txt | sed /'INFO'/q | grep 'INFO')
read-t60<这似乎适合我
read -t 60 < <(tail -f log.txt | sed /'INFO'/q | grep 'INFO')
,它在脚本中不应该是活动的,而且(当然)它限制了对GNUread-t60<这个命令(Debian/Ubuntu“coreutils”包的一部分)似乎很合适:
这个命令(Debian/Ubuntu“coreutils”包的一部分)似乎很合适:timeout 1m tail -f log.txt | grep 'INFO'
timeout 1m tail -f log.txt | grep 'INFO'
注意……顺便说一下,我会考虑使用<代码> AWK <代码>代替<代码> GRP <代码> SED逻辑,因为它可以做这两个工作。实际上,也许更相关。不需要<代码> SED…<代码> >代码> > GRP单独执行。注意…BTW,我将考虑使用<代码> AWK <代码>代替<代码> GRP <代码> SED逻辑,因为它可以做这两者的工作。实际上,也许更相关。不需要<代码> SED…
,它在脚本中不应该是活动的,而且(当然)它限制了对GNU,只需
即可。nod。导入grep
是OP最直接的问题(尽管我不知道他们为什么要为运行read
和sed
的开销而烦恼;你可以让grep
完成所有的工作,或者——我的偏好——只是委托给sed
)。顺便问一句,awk
在这里有价值吗?如果有一个函数或别名设置--color=always-color=auto
@CharlesDuffy的可移植性,我想我需要担心缓冲,但事实似乎并非如此。对,因为缓冲区在退出时被刷新。如果您捕获了多个grep
行,但在第一行之后退出会“免费”刷新,@CharlesDuffy不知道信息
从何而来,肯定是我的终端窗口的复制/粘贴问题,我没有手动添加。nod。导入--color=always
是OP最直接的问题(尽管我不知道他们为什么要为运行read
和sed
的开销而烦恼;你可以让grep
完成所有的工作,或者——我的偏好——只是委托给sed
)。顺便问一句,awk
在这里有价值吗?如果有一个函数或别名设置--color=always-color=auto
@CharlesDuffy的可移植性,我想我需要担心缓冲,但事实似乎并非如此。对,因为缓冲区在退出时被刷新。如果您捕获了多个grep
行,但在第一行之后退出会“免费”刷新,@CharlesDuffy不知道信息
从何而来,肯定是我的终端窗口的复制/粘贴问题,我没有手动添加它。--color=always