bash 的四种执行方式

父进程:. a.sh  或者 source  a.sh
子进程:bash a.sh   或者 ./a.sh

  1. 直接执行(子进程):在这种方式下,命令行会直接执行脚本文件。您可以通过以下两种方式之一来执行脚本:

    • bash a.sh:这将在子进程中执行 Bash 脚本。
    • ./a.sh:这将在当前目录中执行脚本文件。为了能够执行脚本文件,通常需要在脚本文件的开头添加可执行权限,例如使用命令 chmod +x a.sh
  2. 通过 source 命令执行(父进程):在这种方式下,脚本文件将在当前 shell 会话中执行,而不是启动新的子进程。您可以使用以下命令之一来执行脚本:

    • source a.sh:这将直接在当前 shell 会话中执行脚本文件。
    • . a.sh:这也是在当前 shell 会话中执行脚本文件的一种简写方式。

这两种方式的主要区别在于脚本的执行环境。直接执行的方式会在子进程中运行脚本,而通过 source 命令执行的方式则在当前 shell 会话中运行脚本。这种区别可能会导致一些环境变量和函数的作用域问题,因此在使用时需要注意。

父进程:通常指的是启动脚本的原始进程。在大多数情况下,当您在命令行中直接运行一个脚本时,该脚本将在父进程中执行。这意味着脚本中的任何命令和操作都是在与启动脚本的进程相同的进程中执行的。

子进程:子进程是父进程的一个分支,它由父进程创建。当您使用 bash a.sh 或 ./a.sh 执行脚本时,脚本实际上是在一个新的子进程中执行的。这意味着脚本中的命令不会影响启动脚本的父进程的环境或状态。子进程和父进程是相互独立的,它们之间的通信和交互可能受到限制。

通过 source 或 . 命令执行脚本时,脚本是在当前的 shell 会话中执行的,而不是在子进程中。这意味着脚本中的命令将在相同的 shell 环境中运行,并能够访问和修改当前 shell 的变量和函数。

总结:执行方式的选择取决于您希望脚本如何与当前的 shell 环境和其他进程交互。如果您希望脚本独立运行,不受父进程的影响,可以使用子进程方式执行。如果您希望脚本在当前 shell 会话中运行,并能够访问和修改环境变量或定义函数等,则可以使用 source 或 . 命令执行脚本。

### 如何在 Linux执行 Bash 脚本 #### 使用路径直接执行 如果赋予了脚本可执行权限,则可以直接通过指定其绝对或相对路径来执行该文件。例如,假设有一个名为 `script.sh` 的脚本位于当前目录下,在给予执行权限之后可以通过如下命令启动它: ```bash chmod +x ./script.sh ./script.sh ``` 这种方式会在新的子进程中运行此脚本[^1]。 #### 利用 `sh` 或者 `bash` 命令执行 即使没有设置可执行位,也可以借助 `sh` 或者 `bash` 解释器来读取并执行脚本中的指令。对于同样的 `script.sh` 文件来说,可以这样操作: ```bash sh script.sh # 或者 bash script.sh ``` 这两种情况下同样会创建一个新的子进程环境来进行处理。 #### 应用 `. (点)` 或者 `source` 命令加载 不同于前两种方法的是,“`.`(点)” 和 `source` 关键字允许在同一 shell 进程内部引入另一个脚本的内容,并立即生效其中定义过的变量和函数等资源。这对于配置类的初始化非常有用: ```bash . ./script.sh # 或者 source ./script.sh ``` 这里不会开启额外的子进程实例;相反,所有动作都在现有上下文中完成。 为了确认所使用的 Shell 类型以及查找可用的解释器位置,可通过查阅 `/etc/shells` 文件得知更多信息: ```bash cat /etc/shells ``` 上述命令能够展示系统支持的各种合法登录Shell列表,包括但不限于默认安装好的Bash版本所在的位置[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值