我正在尝试运行以下命令,作为对其他内容的测试:
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
命令的输出,因此,变量赋值会等到stdout
fromsleep
关闭。
如果您交换&
和> /dev/null
,它在中可以正常工作,Bourne Shell
并且也应该在中可以正常工作,bash
除非中存在错误bash
。