【问题标题】:How to output redirect to overwrite file while command is running Linux?如何在命令运行 Linux 时输出重定向以覆盖文件?
【发布时间】:2015-08-24 22:30:32
【问题描述】:

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

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

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

【问题讨论】:

    标签: linux pipe output-redirect


    【解决方案1】:

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

    您似乎想使用> 而不是>>

    为了只获取最后一行同时 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;
    

    【讨论】:

    • 我需要它在命令运行时覆盖文件,而不是在每次运行该命令之后。
    • 这也很有趣,但我真的可以不保留日志。我可以在输出重定向上做一个尾巴吗?
    • 不幸的是,不是以简单/基于 shell 的方式(据我所知),因为原始 ifstat cmd 不断产生输出,而 tail 将等到它完成才能到达最后一行。如果不想要第二个日志文件,您还可以将 ifstat cmd 从@Atafar 的响应(即多次 ifstat 执行)传送到“tail -1”,然后再重定向到 /tmp/transfer.txt。
    • 您可以让 stat 运行 1 秒然后终止,就像 Atafar 最后对 1 所做的那样。但是如果文件存在,它不会覆盖文件,它只是附加到它。
    • 这就是我在最后一句话中的意思(是的,它确实会覆盖):虽然是真的;执行 ifstat -t -i wlan0 1 |尾 -1 > /tmp/transfer.txt;睡眠 0.5;完成
    【解决方案2】:

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

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

    或者只是

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

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

    【讨论】:

    • 我需要它在命令运行时覆盖文件,而不是在每次运行该命令之后
    • 我明白你在做什么。好的。不幸的是,它不起作用。它仍然附加到文件中。奇怪的?我在 Raspbian 上运行它。如果我手动使用 >,它会重新创建文件。但不是你的一个班轮。一个班轮在我运行后只做一次。但我可以使用它并让它做我需要的!谢谢
    猜你喜欢
    • 1970-01-01
    • 2012-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-25
    相关资源
    最近更新 更多