我有一个设备的远程系统日志记录器,如果存在条件,则每隔大约15秒左右就会包含一个特定的字符串。它可以通过运行它来检测:
(timeout 20 remote-logger 2>&1) | grep -m 1 KEY
(使用更高的超时值来补偿潜在的抖动)
如果先前找到KEY字符串,有没有办法将其短路?
答案 0 :(得分:2)
在带有GNU工具链的bash 4.4中,您可以执行以下操作:
exec 3< <(stdbuf -oL remote-logger | grep --line-buffered -m 1 KEY); pid=$!
read -t 20 -r key <&3
kill "$pid"
在4.4之前,$!
无法捕获流程替换的PID,因此您无法执行kill
- 但其他部分应该有效
顺便提一下,您也可以在shell中进行本地过滤(吞吐量较低,但管道启动成本较低):
result=
while IFS= read -r line; do
case $line in
*KEY*) result=$line;;
*) continue;;
esac
done < <(timeout 20 remote-logger)