自行停尾操作

时间:2014-04-08 19:29:49

标签: linux bash copy-paste tail

我需要一些帮助:

在菜单中将执行尾部操作,然后在某个输出后尾部将被终止,我们将返回菜单。

tail -f server.log |
  grep "Started successfully with " &&
  echo "it is working" ||
  echo "not working"

任何人都可以帮我做一个自动关闭尾部命令吗?

2 个答案:

答案 0 :(得分:2)

你可以这样做:

tail -f server.log | awk '/Started successfully with/{print "it is working"; system("pkill tail"); exit}'

由于您使用的是"not working",因此无法打印tail -f,并且您永远不知道您的搜索字符串不存在多长时间。

答案 1 :(得分:0)

@ anubhava的答案有效,但不需要awk

关键是将grep-m1一起使用,这会在找到匹配后返回,此时tail进程可以被终止:

tail -f server.log | 
  { grep -m1 "Started successfully with " && pkill -P $$ -x tail; }
  • -P $$(仅考虑当前shell的子进程)和-x(完全匹配进程名称)确保只有tail感兴趣的进程被终止。
  • 您还可以使用子shell (...)而不是命令分组{ ...; }(效率稍低)。
  • 如果找不到 字符串,grep仅在tail 外部被杀的情况下返回 - 报告此案例,添加一个||条款;例如,|| echo 'ERROR: tail -f was killed' >&2