在后台运行命令后回显 BASH 函数的值

在后台运行命令后回显 BASH 函数的值

我正在尝试运行以下命令,作为对其他内容的测试:

function echo_test {
  sleep 60 & > /dev/null
  returnpid=$!
  echo $returnpid
}

pidthatwasreturned=$(echo_test)

echo "This was the value that was returned by the function:"
echo $pidthatwasreturned

问题是该函数在睡眠完成之前不会退出并返回,即使它已在后台运行。在我正在开发的脚本中,睡眠命令将有效地被长时间运行的命令取代。有什么方法可以重写这个函数以使其立即返回吗?

答案1

函数退出,但 shell 会pipe从函数中设置读取函数的代码stdout,然后将结果放入变量 中pidthatwasreturned

然而,该stdout文件描述符被该sleep命令保持打开状态 60 秒。

您的函数会重定向 echo 命令的输出,但不会重定向该sleep命令的输出,因此,变量赋值会等到stdoutfromsleep关闭。

如果您交换&> /dev/null,它在中可以正常工作,Bourne Shell并且也应该在中可以正常工作,bash除非中存在错误bash

相关内容