我编写了一个bash脚本,该脚本使用cat
将一个文件的内容写入另一个文件。然而,我希望写入的文件被清空,基本上每次写入时都要清空。我当前的代码只在启动时清空文件。
代码:
#!/bin/ash
while true
do
cat /dev/rs232 > /tmp/regfile
> /dev/rs232
sleep 1
> /tmp/regfile
done
编辑:为了使目的更加清晰,我尝试使用另一个程序读取/tmp/regfile
(将输出发布到MQTT代理(,该程序无法直接读取/dev/rs232
(因此我的程序应该是解决此问题的方法(。CCD_ 4不断地接收新的字符串。sleep 1
是因为它只能每秒发布一次。
首先,您必须不断地从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
清空文件的一种方法,>filename
如果你想高效,truncate -s 0 filename