如果我将脚本作为后台进程,会发生什么情况?

Pit*_*kos 4 bash shell background subshell

从 BASH 页面:

当使用 source 运行脚本时,它在现有 shell 中运行,脚本创建或修改的任何变量在脚本完成后仍然可用。相反,如果脚本仅作为文件名运行,则将生成一个单独的子 shell(具有一组完全独立的变量)来运行该脚本。

但如果我跑步会发生什么

. myscript &
Run Code Online (Sandbox Code Playgroud)

在这种情况下它作为子 shell 运行吗?. myscript &和 和有什么区别./myscript &

arc*_*444 5

是的 - 您可以轻松测试这一点:

源文件:

echo "Source File"
echo "Source PID - $BASHPID"
MYVAR=someval
Run Code Online (Sandbox Code Playgroud)

执行文件:

. source 

echo "Exec PID -$BASHPID"
echo $MYVAR
echo done
Run Code Online (Sandbox Code Playgroud)

输出:

Source File
Source PID - 34893
Exec PID - 34893
someval
done
Run Code Online (Sandbox Code Playgroud)

如果使用执行文件&中的. source,则执行顺序不同,与进程关联的 PID 也不同,并且您可以看到MYVAR源文件中设置的变量没有打印:

Exec PID - 34931

done
Source File
Source PID - 34932
Run Code Online (Sandbox Code Playgroud)