【发布时间】:2016-01-22 23:44:42
【问题描述】:
我有一个程序在运行时将其输出记录到 *.out 文件中。我设置了一个 bash 脚本来运行几个不同的时间,所以每次运行都会写入一个不同的 *.out 文件。我发现我可以像这样tail 最新的 *.out 文件:
watch tail $(ls -tr *.out | tail -n1)
问题似乎是引用$() 只执行一次。因此,当第一次运行完成时,watch 会继续使用相同的 *.out 文件 tail,即使现在有一个更新的 *.out 文件。
如何在一次运行完成后更改它以转到下一个 *.out 文件?
我尝试做一些引号和括号的嵌套,但我不太了解引用的细节。 watch 将其命令传递给 sh 的事实使事情变得复杂,即使我使用的是 bash。
奖励积分:如果可以将其修改为 tail -f 而不是每 n 秒重复一次 watch,那就太好了。
【问题讨论】:
-
hm..我真的不明白用例。你想实时读取几个文件吗?如果是,使用
tail -f *.out会更容易 -
我一般同意@pivanchy,但值得一提的是,POSIX
tail不能保证一次处理多个文件。 -
@pivanchy 这就是解决方案。没想到这么简单。
-
@JeffIrwin 只要你没有真正创建新文件,就像我愉快地假设的那样。
-
@JeffIrwin 这不是因为 bash 只会全局化所有当前文件。