可以在 bash 子 shell 中调用函数作为后台作业吗?

发布于 2024-11-06 01:58:27 字数 498 浏览 2 评论 0原文

假设我有一个 bash 函数,

Yadda() {
  # time-consuming processes that must take place sequentially
  # the result will be appended >> $OUTFILE
  # $OUTFILE is set by the main body of the script
  # No manipulation of variables in the main body
  # Only local-ly defined variables are manipulated
}

我是否可以在子 shell 中调用该函数作为后台作业?例如:

OUTFILE=~/result
for PARM in $PARAMLIST; do
  ( Yadda $PARM ) &
done
wait
cat $OUTFILE

你觉得怎么样?

Let's say I have a bash function

Yadda() {
  # time-consuming processes that must take place sequentially
  # the result will be appended >> $OUTFILE
  # $OUTFILE is set by the main body of the script
  # No manipulation of variables in the main body
  # Only local-ly defined variables are manipulated
}

Am I allowed to invoke the function as a background job in a subshell? E.g.:

OUTFILE=~/result
for PARM in $PARAMLIST; do
  ( Yadda $PARM ) &
done
wait
cat $OUTFILE

What do you think?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

时光匆匆的小流年 2024-11-13 01:58:27

您可以在子 shell 中将函数作为后台作业调用。它将像您在示例中输入的一样工作。

我在您的示例中演示的方式中发现了一个问题。如果某些进程同时完成,它们将尝试同时写入 OUTFILE,并且输出可能会混淆。

我建议让每个进程写入自己的文件,然后在所有进程完成后收集文件。

You can invoke the function as a background job in a subshell. It will work just like you typed in your example.

I see one problem in the way you demonstrated it in your example. If some of the processes finish simultaneously, they will try to write to the OUTFILE at the same time and the output might get mixed up.

I suggest to let each process write to it's own file then collect the files after all processes are done.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文