BASH SHELL如果ELSE在后台运行命令

bik*_*ben 2 bash shell if-statement background-process

我之前使用过该&命令使脚本在后台运行另一个脚本,如下所示:

#!/bin/bash
echo "Hello World"    
script1.sh &
script2.sh &
echo "Please wait..."
Run Code Online (Sandbox Code Playgroud)

但是让我说我​​有另一个带有IF ELSE语句的脚本,我想设置一个ELIF语句mid flow作为后台任务,&然后继续处理剩下的脚本,因为知道ELIF的其余部分将进行运行在后台:

#!/bin/bash
if cond1; then
   stuff
   sleep 10 &
   stuff
   stuff
elif cond2; then
   something else
else 
   echo "foo"
fi
stuff
echo "Hello World"
Run Code Online (Sandbox Code Playgroud)

我真的希望这是有道理的任何帮助将不胜感激.

Lew*_*ton 5

您可以在子shell中运行命令.子shell将在单独的(子)进程中执行.您可以通过用括号括起来定义子shell中运行的命令.

而且,如您所知,要在后台运行一个进程,只需附加一个&.


if如果您要在单独的后台进程中执行它,那么您的语句将如下所示:

#!/bin/bash
( if cond1; then
    stuff
    sleep 10 &
    stuff
    stuff
 elif cond2; then
    something else
 else 
    echo "foo"
 fi
 stuff
 echo "Hello World" ) &
Run Code Online (Sandbox Code Playgroud)

  • 基本摘要:在`(`和`)&`中包装你想要执行的主体. (2认同)
  • 使用'{list; }&'也可以对命令进行分组.该列表将作为'&'的结果在子shell中运行. (2认同)