脚本/程序如何在 unix 中执行?

mun*_*ish 3 scheduling shell-script

我对 unix 脚本的执行模式有疑问。

例如包含行的脚本:

command B
function C()
{
Myscript   // Myscript is a script 
command  D
}
command E
Run Code Online (Sandbox Code Playgroud)

并假设如果Myscript执行需要很长时间(比如 5 分钟),那么下一个命令 ( command D) 将执行或等待Myscript完成。

Ale*_*ios 16

对于您的特定脚本,既Myscript不会command D也不会执行。你已经定义了一个函数C,但你没有调用它。

执行顺序为:

  1. command B 运行到完成。
  2. command E 运行到完成。

如果您调用C,它将运行Myscript到完成,然后运行command D到完成。

您在 shell 脚本中调用的所有内容都按照它所看到的顺序运行,并一直运行到完成。如果您需要与其他东西并行运行,您应该使用作业控制(查看与号字符如何&用于将作业置于后台)。一个简单的例子:

A
B
Run Code Online (Sandbox Code Playgroud)

运行A直到完成,然后运行B直到完成。脚本完成。

A &
B
Run Code Online (Sandbox Code Playgroud)

运行A在后台,然后在前台运行B中。shell 脚本在B完成时结束。A可能仍在运行。

A &
B &
Run Code Online (Sandbox Code Playgroud)

A在后台运行,然后(无需等待A完成),B在后台运行。脚本立即结束。

A &
B &
wait
Run Code Online (Sandbox Code Playgroud)

A在后台运行,然后(无需等待A完成),B在后台运行。然后脚本在退出之前等待AB完成。