This question already has an answer here:

No output from awk only when redirected to pipe or file [duplicate]
(1个答案)
考虑以下虚拟备份脚本:
#!/bin/bash
echo "rsync started"
sleep 1 # rsync time
echo "rsync completed"
echo "starting upload"
sleep 5 # upload time
echo "upload completed"

以及下面的最小启动脚本
#!/bin/bash
/path/to/backup.sh|awk '/^rsync completed/ {print "Restarting services"}'
echo "backup completed"

我本以为“重新启动服务”输出会在一秒钟后出现,但在Debian喘息状态下运行时,它会在6秒钟后出现。
我的错误在哪里?当“rsync completed”字符串写入stdout时,为什么不直接处理awk操作?

最佳答案

使用sed而不是awk。

/path/to/backup.sh|sed 's/^rsync completed/Restarting services/g'
echo "backup completed"

关于linux - 没有立即处理通过管道传输到awk的输出,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28499635/

10-13 09:16