Linux中: "父子进程和 shell 脚本的执行方式"
父子进程和 shell 脚本的执行方式:
Linux 中父进程创建子进程后。子进程会继承父进程的大部分执行环境(环境变量、工作目录等),但进程之间资源是隔离的,所以 子进程对 "变量、目录" 等资源的修改不会影响父进程。
基于这一点,Shell 脚本的执行方式可以总结为两大类:
- 在当前 Shell 中执行(不创建子进程):会修改当前 Shell 环境信息,一般用来加载配置,环境变量操作。
- 在子 Shell 中执行(创建子进程):修改环境仅作用在子 Shell,不影响当前 Shell,执行完后子进程退出。
| 执行方式 | 是否启动子 Shell | 是否需要执行权限 | 变量/环境是否影响当前 Shell |
|---|---|---|---|
bash script.sh |
是 | 否 | 不影响 |
./script.sh |
是 | 需要 | 不影响 |
source script.sh 或 . script.sh |
否 | 不需要 | 会影响 |
bash -c "命令" |
是(短命令) | 否 | 不影响 |
env VAR=value ./script.sh |
是 | 需要 | 仅在子 Shell 生效 |
例如:某个脚本里面包含exit命令,如果是在当前shell内执行,会导致整个终端退出。
浙公网安备 33010602011771号