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

Pio*_*ula 4 linux pipe output-redirect

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

ifstat -t -S -i wlan0
Run Code Online (Sandbox Code Playgroud)

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

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...
Run Code Online (Sandbox Code Playgroud)

好的,我知道使用它会覆盖文件。但只有在我第一次运行它之后。而不是在应用程序执行期间。

ifstat -t -S -i wlan0 >> /tmp/transfer.txt
Run Code Online (Sandbox Code Playgroud)

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

Dan*_*scu 7

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

看起来您想使用>而不是>>

为了在 ifstat 执行时仅获取最后一行,您可以将其提取到第二个文件中,如下所示:

while true; do tail -1 /tmp/transfer.txt > /tmp/transfer2.txt; sleep .5; done
Run Code Online (Sandbox Code Playgroud)

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

while true; do ifstat -t -i wlan0 1 1 | tail -1 > /tmp/transfer.txt; sleep .5; done;
Run Code Online (Sandbox Code Playgroud)