在后台进程中重定向 sed 中的控制台输出不回手

在后台进程中重定向 sed 中的控制台输出不回手

我使用 sed 在命令给出的每一行的开头添加日期(使用 vlc 并且永远不会停止......)。我在另一个 stackexchange 帖子上找到了这种方式,并且按预期工作。

command | sed "s/^/$(date +%Z-%Y-%m-%d-%T) /" &>> $LOGFILE &

现在我想使用脚本文件中的它作为后台进程。我的问题是脚本永远不会完成并停在这一行。

如果我理解得很好,只要命令正在运行,sed 就永远不会完成,但无论如何它应该在后台运行并进入下一步?

如果我删除 sed 部分,脚本将按预期结束。

我在 Centos 6.4 上运行 GNU bash,版本 4.2.53(1)-release (x86_64-redhat-linux-gnu)

答案1

您的命令需要打印一个换行符以使管道处理它。

test1(){ echo "testing-one"; sleep 100; }
test2(){ echo -n "testing-two"; sleep 100; }

test1| sed "s/^/$(date -u +%Z-%Y-%m-%d-%T)/"

当测试的函数(充当命令代理)为 时test1,它确实会发出换行符。使用时,即使命令本身尚未完成(sleep 100),也会立即发出一行。

当使用函数 test2 时(编辑第三行),直到整个命令行完成后才会发出该行。

相关内容