【问题标题】:Using "tail -f | grep" in script to simply show output在脚本中使用“tail -f | grep”来简单地显示输出
【发布时间】: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",但我认为这不会有帮助。

标签: bash grep tail


【解决方案1】:

我会这样做:

currentLog=$(find /path/to/logs -type f -mtime -1 -print -quit)
tail -f "$currentLog" | grep -Ei '(.*)(Expression)(.*)'

当我在 /var/log 上尝试时,它对我有用。

告诉我!

【讨论】:

  • 我认为使用 find 而不是 ls 更可取。我将检查 Arkadiusz Drabczyk 的链接,了解为什么不使用 ls 来解析信息。
【解决方案2】:

感谢您的回复。问题实际上是我使用的是 0 美元。更改为 1 美元,它按预期工作。这个问题现在具有误导性,因为答案与 tail 或 grep 无关......

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-04
    相关资源
    最近更新 更多