以下是问题的简短示例
将每10秒测试写入其标准输出的短脚本
> cat write.sh
#!/bin/sh
while [ 1 ];do
echo test
sleep 10
done
以下是我们执行它的方式,我们将stdout重定向到名为output.txt
的文件
./ write.sh> output.txt的
现在,脚本应该永远运行"但是同时它会填充output.txt
我们正在寻找一种方法来备份此output.txt
而无需重新启动脚本。
此外,我们正在寻找隐式解决方案,因此即使脚本也不知道该文件已备份。
当然,一旦我们删除此文件(例如压缩它),进程(脚本)将丢失此文件的跟踪并停止写入。
即使我们备份文件(压缩)然后使用touch
返回文件,脚本也无法重新连接到此文件。
例如:
mv test_file.txt test_file111.txt
rm test_file111.txt
> lsof | grep write
write.sh 2644 ronnyr 1w REG 253,1 36 106059124 /home/ronnyr/test_file111.txt (deleted)
> touch test_file111.txt
write.sh 2644 ronnyr 1w REG 253,1 36 106059124 /home/ronnyr/test_file111.txt (deleted)
答案 0 :(得分:2)
如果要更改或截断输出文件,请使用>>
,如下所示:
./write.sh >> output.txt
# take backup
cp -p output.txt /path/backup/
# truncate stdout file
> output.txt
由于使用>>
(追加)./write.sh
将继续在文件末尾写入输出,并且在截断输出文件时不会受到影响。