【问题标题】:Bash watch text fileBash 监视文本文件
【发布时间】:2012-09-10 11:32:08
【问题描述】:

我正在尝试制作一个小脚本来监视文件夹中的最新日志文件并从日志中获取聊天内容,然后将其显示在 tmux 面板中,但由于某种原因它找不到该文件虽然它确实存在

FILENAME=server_logs/$(ls -t1 server_logs | head -n 1)
watch -n3 'grep "\] " '$FILENAME' | tail -n15' 

当我运行该文件时,它给了我这个 grep:server_logs/server_log_09_18_12.txt:没有这样的文件或目录

但如果我使用watch -n3 'grep "\] " server_logs/server_log_09_18_12.txt | tail -n15' 它确实有效。 所以我的问题是为什么找不到文件?

【问题讨论】:

  • 如何运行脚本?例如,如果你是从 cron 运行它,那么开始部分可能不是你想的那样。
  • 我正在使用“bash watch.sh”通过 SSH 运行它。
  • 虽然我通常只使用tail -f ... | grep ...,但您的命令看起来还不错。这是你的完整剧本吗?
  • 当你指定server_logs/*的完整路径时,它是否在脚本中正确运行?
  • 两个想法:简化一点引用 (watch "cat '$FILENAME' | grep '\] ' | tail -n15") 和使用完整路径 ($(readlink -f $(ls -t1 ... | head )))。不过,您的代码并没有什么问题。

标签: file bash text watch


【解决方案1】:

我发现它为什么不起作用,$FILENAME 末尾有一些空格导致文件未找到错误,所以我使用了这个:

FILENAME="${FILENAME#"${FILENAME%%[![:space:]]*}"}"   # remove leading whitespace characters
FILENAME="${FILENAME%"${FILENAME##*[![:space:]]}"}"   # remove trailing whitespace characters 

我在another Stackoverflow question找到的。

感谢您的回复。

【讨论】:

    【解决方案2】:

    watch -n3 'grep "] " '$FILENAME' |尾 -n15'

    有两组 ' 引号。 你想逃避内部的 ' 标志。

    【讨论】:

      猜你喜欢
      • 2011-09-22
      • 1970-01-01
      • 2022-06-10
      • 1970-01-01
      • 2014-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-18
      相关资源
      最近更新 更多