在文件上使用 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
我写了一个 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