脚本中的bash命令替换执行后台任务。

3

我希望能返回脚本的结果,同时也启动一个后台任务。使用命令替换运算符可以等待后台任务完成,但这会使调用变慢。为了说明问题,我创建了以下示例:

function answer {
    sleep 5 &
    echo string
}

echo $(answer)

有没有一种方法可以调用一个命令而不必等待它创建的任何后台作业?谢谢,马克。
2个回答

3
问题在于sleep会继承stdout并将其保持打开状态。您可以简单地重定向stdout:
answer() {
  sleep 5 > /dev/null &
  echo "string"
}
echo "$(answer)"

那就是正在发生的事情。谢谢! - Mark Johnson

0
如果您打算在函数工作的同时让程序继续运行,您可以只是调用该函数以在后台运行。
function answer {
    sleep 5
    echo Second
}

echo $(answer) &
echo First

其输出结果将会是

First
Second

不幸的是,在我需要脚本返回内容的实际示例中。 - Mark Johnson
我将这些命令放入了一个 tmp.sh 文件中,然后使用 sh tmp.sh > out.txt 运行它,输出文件正常工作。 - Jonathan Wheeler

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接