2

我不完全确定如何对这个问题进行分类。感觉就像我在tailand/or中发现了一个错误bash,但显然这更有可能是我理解的一个错误!

我运行了以下命令:

tail -f -n`wc -l scrape.log` scrape.log

为了cat整个文件和添加的任何新材料。但是,这tail对文件进行了两次编辑。运行此命令:

tail -f -n`wc -l scrape.log`

给了我想要的结果,tail文件一次。我认为反引号是一种 Bash 转义工具,可以在运行下一个命令之前“预处理”一个命令。这里发生了什么?

4

3 回答 3

9

当您使用反引号时,您实际上是将一个命令的输出传递给另一个命令。现在让我们看看有什么wc -l作用:

[cnicutar@fresh ~]$ wc -l /etc/passwd
11 /etc/passwd

它输出行数和文件名。所以你的命令变成:

tail -f -n 11 scrape.log scrape.log
于 2012-08-07T18:51:37.163 回答
4

如果你tail支持它,你可以使用

tail -f -n +1 scrape.log

从文件的第 1 行开始tail

(我故意不回答你的问题,cnicutar 已经完成了。我只是提出一个可能的替代方案。)

于 2012-08-07T19:04:38.313 回答
1

替代解决方案

tail -f -n $(wc -l < scrape.log) scrape.log

输入重定向可防止打印文件名。

于 2012-08-07T20:20:53.707 回答