![GNU tail -f 和命令组合的问题](https://linux22.com/image/22687/GNU%20tail%20-f%20%E5%92%8C%E5%91%BD%E4%BB%A4%E7%BB%84%E5%90%88%E7%9A%84%E9%97%AE%E9%A2%98.png)
$ 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)'