如何只将最新的一行输出动态重定向到文件?

问题描述 投票:0回答:1

我有以下的输出。

artist - song name
artist - song name
artist - song name

当一首歌结束时,程序会在新的一行中打印下一个艺术家和歌曲名称.我想以某种方式管道输出,并只保存最新的条目到文件中,当有新的条目时,它会覆盖文件。

在bash中使用简单的管子就可以实现吗?还是我必须要写一些包装脚本来实现?

bash unix
1个回答
1
投票

让我们模拟一个程序,它每隔几秒钟用shell函数打印一个新的艺术家歌曲名称。

printsong() {
    local i=0
    while :; do
        echo "artist - song $((++i))"
        sleep 3
    done
}

现在,我们从这个函数中读取数据 每当有新的行时,就覆盖一个文件。

printsong | while IFS= read -r song; do echo "$song" > output; done

output 现在将总是包含最新的一行输出从 printsong.

© www.soinside.com 2019 - 2024. All rights reserved.