我使用 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 时(编辑第三行),直到整个命令行完成后才会发出该行。