如何在命令运行Linux时输出重定向以覆盖文件?

时间:2015-06-09 21:41:00

标签: linux pipe output-redirect

我不确定这是否可行。但我正在使用此命令来获取网络吞吐量。

ifstat -t -S -i wlan0

就像它在控制台上内联更新一样运行,但当我管道它时,它会在文件中添加一个新行。

ifstat -t -S -i wlan0 >> /tmp/transfer.txt

  Time          wlan0
HH:MM:SS   KB/s in  KB/s out

21:33:35      4.27    201.47
21:33:36      4.20    178.88
21:33:37      4.41    190.76
21:33:38      4.32    186.61
21:33:39      5.07    177.42
21:33:40      4.15    182.87
21:33:41      5.70    180.93
21:33:42      4.21    194.71
21:33:43      3.80    181.35
21:33:44      3.86    185.57
21:33:45      3.92    189.78
21:33:46      4.08    195.29
etc...

好的我明白使用它会覆盖文件。但是只有在我第一次运行它之后。不执行应用程序。

ifstat -t -S -i wlan0 >> /tmp/transfer.txt

在应用程序运行时,我真的不需要记录所有传输速率,只需对每一次更新写一行感兴趣。 我希望它创建一个新文件或每秒覆盖一次,而不是在执行期间附加行。

2 个答案:

答案 0 :(得分:3)

从技术上讲,你不是管道,而是重定向输出。

您希望使用>代替>>

为了获得最后一行 ifstat正在执行,你可以在第二个文件中提取它,如下所示:

while true; do tail -1 /tmp/transfer.txt > /tmp/transfer2.txt; sleep .5; done

每次都要覆盖文件而不保留日志。

while true; do ifstat -t -i wlan0 1 1 | tail -1 > /tmp/transfer.txt; sleep .5; done;

答案 1 :(得分:1)

您可以尝试以下方法之一(我没有您的ifstat版本,因此我无法在自己的系统上验证这一点。)

while /bin/true; do ifstat -t -i wlan0 1 > tmp/transfer.txt; sleep 1; done

或者只是

ifstat -t -i wlan0 > tmp/transfer.txt

所以,不要使用-S标志,因为在重定向到文件时这不起作用。