linux - 当我将 `&` 与 Bash 脚本中的函数一起使用时会发生什么?

标签 linux bash shell

我正在用 shell 脚本调试一个奇怪的东西,想知道我是否误解了 Bash 的“fork”(&)是如何工作的,也许是因为我通常通过终端在单个命令中使用它,例如:

[~me]$ someExecutable &

现在,在 shell 脚本中:

foo() {
   echo "logic"
}

bar() {
   echo "idic"
}

baz() {
   echo "katra"
}

foo &
bar
baz

我的意图是异步调用函数 foo,然后脚本的其余部分继续在原始进程上下文中执行。

当我执行这个示例脚本时,我确实得到了预期的输出:

logic
idic
katra

(也就是说,只对 barbaz 进行一次明显的调用;我一点也不为相关顺序 三行输出,我的理解可能会有所不同)

但我可能误解了输出和脚本本身。如果是这样,那肯定可以解释我在真实代码中看到的奇怪之处,并使我不必进一步挖掘。

是否有可能,在子进程中,在调用foo 之后, fork 的shell 脚本将继续?这意味着我的 shell 脚本的其余部分将被执行两次

当我在 Bash 脚本中像这样使用 & 时到底发生了什么?

最佳答案

在您的示例中,& 符号仅 fork 对 foo() 的调用。它不是 fork 整个脚本。只有 foo() 在单独的线程中运行,当 foo() 完成时退出。 bar() 和 baz() 继续在同一个线程中运行

关于linux - 当我将 `&` 与 Bash 脚本中的函数一起使用时会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21091867/

相关文章:

linux - Git Bash 在 Windows 7 上显示奇怪的字符

Bash 脚本中的正则表达式

linux - bash脚本重命名目录中的所有文件?

shell - cron 无法在 shell 脚本中使用 hadoop 命令

linux - 检查文件是否存在 [SH]

linux - 调用 0x16 时出现段错误

linux - 在 grep 之后在同一行打印 awk 输出

java - Runtime.getRuntime.exec() 无法正常工作

python - 使用 shell 脚本 Ubuntu 遍历目录中的文件

linux - 检查bash上是否只有一个文件存在当前数据