epr*_*oms 4 shell bash text-processing output
我没有太多运气找到我的问题的答案,但也许我没有正确要求它。
我有一个启动过程,如下所示:
nohup ping 127.0.0.1 > log.txt >2>&1 &
非常简单的命令,将所有标准输出发送到 log.txt。唯一的问题是我正在运行的命令每隔 n 秒将数据发送到 log.txt。我想只输出一行到我的 log.txt 文件,而不是附加它并冒着填满我的驱动器的风险。
有没有办法只输出一行到不断被覆盖的 log.txt?
这是一个快速而肮脏的解决方案,只保留日志文件中的最后一行输出:
ping localhost |
while IFS= read -r line; do
printf '%s\n' "$line" > log.txt;
done
Run Code Online (Sandbox Code Playgroud)
请注意,在尝试访问文件进行读取时,您现在可能会遇到各种竞争条件。从相互访问中“锁定”文件可能会有所帮助。有关在 stackoverflow 上锁定此问题的更多信息可能是一个好的开始:如何从多个脚本同步(锁定/解锁)对 bash 中文件的访问?