等待标准输出流完成,然后将其内容添加到文件中

等待标准输出流完成,然后将其内容添加到文件中

我正在尝试在 bash 中运行一个命令,其中我有一个command 1通过 stdin 接受大量内容,然后将该内容输出到 a 的命令file.txt,但是,command 1会生成一个内容流,并且显然file.txt会在启动时立即创建command 1,然后在command 1完成后进行更新具有正确的输出。

echo 'a lot of content' | command 1 > file.txt

问题是我只想file.txtcommand 1完全完成后创建或触摸。

有什么办法可以实现这一点吗?

编辑:

用例:我正在使用一个 Web 开发服务器,每次文件更改时都会刷新,因此我在真正更新文件之前会进行一些预处理。

上述命令的问题是,如果文件被更新或创建空内容,服务器会立即刷新,有一个空页面,所以我真的想等待后处理完成(假设需要大约 4 秒)并且然后触摸file.txt才能正确呈现在页面上。

因此,我只需要在这里运行一个命令,即更新command 1后,我的 Web 开发服务器将自动刷新。file.txt

答案1

sponge从 GNU使用moreutils

echo 'a lot of content' | command 1 | sponge file.txt

或者使用临时文件。

答案2

最简单的解决方案可能sponge@heemayl 建议。或者,你可以这样做:

command > tmpfile && mv tmpfile watched_file

这将导致command将其输出保存在 中tmpfile,只有在命令退出并且成功退出后,该输出才会被重命名为watched_file(服务器设置为监视的文件)。要在失败时重命名它,请使用:

command > tmpfile; mv tmpfile watched_file

相关内容