a.txt while [ True ]; do #do something here, very long and pos-6ren">
gpt4 book ai didi

linux - 在 shell 脚本中立即写入文件(无行缓冲)

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:29:57 27 4
gpt4 key购买 nike

我有一个这样的脚本,

#!/bin/bash

echo "hello" > a.txt

while [ True ]; do

#do something here, very long and possiblely causing system reboot

done

看来只有正常结束才能得到一个正常的a.txt(里面有“hello”)。如果“while 循环”正在运行或在 while 循环期间触发了系统重启,则会出现空白 a.txt。

通过谷歌搜索,这似乎是一个行缓冲问题,因为 shell 默认打开行缓冲。由于在我定制的 Ubuntu 上没有安装“Expect”或“stdbuf”,我尝试替换

echo "hello" > a.txt

使用 Perl/C 程序,其中行缓冲区被禁用。在 Perl 中,我使用“$|”在 C 中使用了“fflush”。不幸的是,它不起作用。

欢迎任何反馈...

最佳答案

这不完全正确。在回显之后,文件将被写入并对其他程序可见。这是有保证的。

您可能会看到此时文件尚未写入物理磁盘。由于操作系统的文件系统缓冲,可能会发生这种情况。仅仅因为文件已被写入并且其他程序看到它并不意味着它已被写入磁盘。它可能只是在内存中。

您可以使用“sync”命令请求操作系统刷新所有缓冲写入磁盘。在触发重启之前尝试调用它,看看是否能解决您的问题。

The sync utility can be called to ensure that all disk writes have been completed before the processor is halted in a way not suitably done by shutdown(8).

关于linux - 在 shell 脚本中立即写入文件(无行缓冲),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15736491/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com