Skip to content

Shell 执行机制 ​

在 Shell 中,理解进程隔离和环境变量继承机制,是掌握脚本执行行为的基础。

一、 子进程与脚本执行 ​

当我们在终端执行一个外部脚本(如 ./script.sh 或 bash script.sh)时,当前终端(父进程)会 fork 出一个全新的子进程来执行该脚本。

  • 进程隔离:子进程拥有独立的内存空间。脚本中进行的变量赋值、cd 操作等,只会在子进程内部生效。
  • 生命周期:脚本执行完毕后,子进程销毁,其中的所有变量修改随之丢失,不会影响父进程(当前终端)。

二、 export 的作用 ​

核心作用:将 Shell 局部变量升级为环境变量,实现向子进程的单向传递。

  • 局部变量:VAR="hello" 仅在当前 Shell 有效。启动子进程时,子进程无法读取该变量。
  • 环境变量:export VAR="hello" 后,当前 Shell 及其后续启动的所有子进程都能读取该变量。
  • 局限性:export 只能向下(子进程)传递,无法向上(父进程)传递。在脚本中 export 变量,脚本结束后父进程依然无法获取。

三、 source 命令的作用 ​

核心作用:在当前 Shell 进程中直接执行脚本,不创建任何子进程(相当于把脚本内容直接复制粘贴到终端里执行)。

使用 source script.sh(或 . script.sh)时:

  1. 不会 fork 子进程。
  2. 脚本内的所有命令、变量赋值、export 均在当前终端进程中执行。
  3. 脚本执行完毕后,当前终端的环境(变量、PATH、别名等)会被真实改变。

总结:./ 开启新进程,修改不外传;export 让变量向下继承;source 在当前进程执行,直接改变当前终端环境。

用文字记录成长,用代码创造价值。