【发布时间】:2019-12-07 20:33:20
【问题描述】:
我一直在网上寻找我想要的解决方案,但是我发现的所有解决方案都使用 tail 作为包装器来等待特定的日志事件——我不想要那样。我只是想这样做:
currentLog=$(ls -t /path/to/logs | head -n1)
tail -f $currentLog | grep $0
在脚本中。将它放在脚本中的目的是因为脚本确定最近的日志文件并将其交给 tail -f 命令。如果没有脚本,我必须手动确定最新的日志文件。该脚本只是作为一种简单的方法来在最近的日志文件上输出 grepped tail -f 。
如果我在 shell 中手动运行上述命令,将会发生所需的输出。我得到的实际输出是什么。输出为空白,直到我按 CTRL+C。
请注意,我尝试使用 grep --line-buffered 解决方案,但它没有改变任何东西。
【问题讨论】:
-
如果只想显示输出,请使用 cat 而不是 tail。
-
它应该可以工作,但这里有 2 个潜在问题 - 0. 你不应该解析
ls的输出 - 请参阅 unix.stackexchange.com/questions/128985/… 1.$0在这里应该是什么意思?位置参数从 1 开始计数。 -
所以调试脚本。检查
currentLog是否是好路径。检查$0的内容是否正确(为什么是$0?)。执行set -x并检查是否使用正确的参数从您的脚本运行正确的进程。最后,您可以stdbuf -oL tail -f "$currentLog" | stdbuf -oL grep --line-buffered "$0",但我认为这不会有帮助。