在不等待其子进程结束的情况下获取bash函数输出的最佳方法是什么?例如,以下操作不起作用,因为直到sleep 10&
子进程结束后才返回bash。
test-fn() {
sleep 10&
echo $!
}
pid=$(test-fn)
echo "waiting"
wait $pid
在test-fn函数中移动echo不是一个选项:在我的实际情况中,子进程永远不会结束,所以函数永远不会返回。
答案 0 :(得分:1)
问题是进程替换正在等待与函数调用的stdout关联的管道的所有写端被关闭,但是睡眠的一端打开。如此接近它:
test_fn() {
sleep 10 >&- & # close stdout for sleep, or redirect if desired
echo $!
}
pid=$(test_fn)
echo "waiting"
wait
请注意,顶级shell无法等待$ pid,因为pid不是该shell的子级。