GNU tail -f 和命令组合的问题

GNU tail -f 和命令组合的问题
$ tail -f /logs/filename.log | awk '!(/list)'

我可以在 GNU Linux 风格中运行这个命令

但是当我写成脚本时它不起作用。

测试.ksh:

variable="/logs/filename.log | awk '!(/list)'" 
tail -f $var

得到错误为

tail: cannot open `|' for reading: No such file or directory
tail: cannot open `grep' for reading: No such file or directory
tail: cannot open `list' for reading: No such file or directory

这方面需要如何开展工作?有人可以指导一下吗?

答案1

你的代码在几个方面被破坏了......

  • 您可以使用名称定义变量variable,然后使用该名称调用它var。那是行不通的。

  • 我一开始就无法弄清楚你想用这个变量来完成什么,因为引用太奇怪了。解释器会遇到比我更多的问题;-) 实际上,您正在发送一个看起来像一组命令(包括管道)的字符串 - 但由于它们位于带引号的字符串内部作为另一个命令的参数,因此它们只会在文本 blob 中遇到这么多字符作为参数。口译员不会碰的东西。

test.ksh也许你想在你的文件中添加这样的内容:

#!/bin/ksh
log_file="/logs/filename.long"
tail -f $log_file | awk '!(/list)'

或者甚至可以使用如下命令运行./test.ksh /logs/filename.log

#!/bin/ksh
tail -f $1 | awk '!(/list)'

答案2

你写了两篇不同的东西。

在 shell 中,您声明 tail -f 的输出被重定向到 awk

在您的脚本中,您声明 tail -f 应从名为“/logs/filename.log”、“|”、“awk”和“!(/list)”的文件中读取数据

您想在脚本文件中写入以下内容:

#!/bin/ksh
variable="/logs/filename.log"
tail -f $variable | awk '!(/list)'

相关内容