- ssh使用的命令:**
$ tac temp.csv | timeout 60s tail -f temp.csv | timeout 60s grep -w -m 1 'message' | awk '{print}' | tac
字符串
在上面的命令中,我想在日志文件中搜索一条消息,但在运行此命令后,我想等待60秒,然后,在60秒后,如果命令找到任何结果,返回该结果,否则返回空字符串。但我在运行此命令后观察到的是,有时此命令等待60秒,有时不会。由于这种行为,我正面临一个问题。
有没有人能告诉我,为什么我观察到的这种行为会发生?有时它会等待60秒,有时不会。
1条答案
按热度按时间ne5o7dgx1#
TL;DR
字符串
完整解决方案
我们首先要解决的是
timeout
命令的正确用法。如手册页所述:timeout -运行一个有时间限制的命令...启动COMMAND,如果在DURATION之后还在运行,就终止它。
它并不是用来作为一个暂停按钮,而是一个故障保护机制,用来“解除”一个过长的进程。与此相反,
sleep
命令,是专门用于一个有时间限制的暂停。从sleep
的手册页:睡眠-延迟指定的时间量.
这将我们带到正确的命令,但现在如何使用这个命令?如果我们天真地通过管道传输到
sleep
命令,我们将丢失传输到它的数据。这可以看起来像这样:型
因此,看看一个相关的SO问题,我们可以看到,运行类似于:
型
可能会起作用。但是,当使用这种解决方案时,您应该考虑括号中的哪个命令将输入到括号中的命令中。由于我们没有使用
tee
或一些重定向技巧,因此只有一个输入,因此命令如下:型
将只输出
dlrow olleh
。因此,我们看到第一个“期望”输入的命令是获得它的命令。