我试图在 bash 中运行一个命令,其中我有一个command 1通过 stdin 接受大量内容然后将该内容输出到 a 的命令file.txt,但是,command 1生成内容流并且显然file.txt在command 1启动后立即创建,然后在command 1完成后更新具有正确的输出。
echo 'a lot of content' | command 1 > file.txt
Run Code Online (Sandbox Code Playgroud)
问题是我只想创建或触摸file.txt一次command 1完全完成。
有什么方法可以实现吗?
用例:我使用的是每次文件更改时都会刷新的 Web 开发服务器,因此我在真正更新文件之前进行了一些预处理。
上面命令的问题是,如果文件被更新或创建空内容,服务器会立即刷新,有一个空页面,所以我真的想等待后期处理完成(假设大约需要 4 秒)和只有file.txt这样才能在页面上正确呈现它。
因此,我只需要在这里运行一个命令,即command 1在file.txt更新后,我的 Web 开发服务器将自动刷新。
我目前正在子 shell 中启动后台进程,想知道如何将其 pid 编号分配给子 shell 范围之外的变量?
我尝试了许多不同的方法,但MYPID始终设置为0.
MYPID = 0;
({ sleep 2 & }; $MYPID=$!)
({ sleep 2 & }; echo $!) > $MYPID
Run Code Online (Sandbox Code Playgroud)
它返回值的唯一方法是:
$MYPID=$({ sleep 2 & }; echo $!)
Run Code Online (Sandbox Code Playgroud)
然而,这会丢弃后台进程指令,它只会在 2 秒后返回结果。