在文件上使用 cat 时清空文件

Emtpy a file while using cat on it

我写了一个 bash 脚本,它使用 cat 将一个文件的内容写入另一个文件。但是,我希望清空正在写入的文件,基本上每次写入文件时都清空。我当前的代码只在启动时清空文件。

代码:

#!/bin/ash
while true
do
cat /dev/rs232 > /tmp/regfile
> /dev/rs232
sleep 1
> /tmp/regfile
done

编辑: 为了使目的更清楚一些,我正在尝试使用另一个程序读取 /tmp/regfile(将输出发布到 MQTT 代理),该程序无法直接读取 /dev/rs232(所以我的程序应该是解决方法)。 /dev/rs232 不断收到新字符串。 sleep 1 是因为它只能每秒发布一次。

一种清空文件的方法, >filename

如果你想高效那么还有, truncate -s 0 filename

首先,你必须不断地从rs232读取,因为很可能设备文件没有任何缓冲区。所以,你必须自己缓冲输入。然后,每隔 1 秒,您可以将缓冲区刷新到文件中。

# Using cat to have hopefully 4K buffer in pipe
# Would be better to use `stdbuf -o4K` explicitly.
cat /dev/rs232 |
while true; do
     # reading data for one second
     data=$(timeout 1 cat)  # TODO: handle errors, so it does not loop endlessly
     # Write data to regfile.
     # This should be fast enough or the buffer from the device
     # should be big enough so that `cat /dev/rs232` will not notice
     # that we stopped reading from stdin.
     # Ideally, this would be asynchronously in another process or thread.
     printf "%s" "$data" > /tmp/regfile
done