shell中source、sh、bash、./执行脚本的区别
时间: 2023-05-08 19:58:21 浏览: 302
shell是一个用于操作系统的命令行解释器,用来解释用户的命令并执行操作。在shell中,source、sh、bash和./执行脚本是使用方式不同的四种执行脚本的方法。
首先是source命令,它用于在当前shell环境中执行指定的脚本,也被称为"dot sourcing"。通过"source 脚本文件"的方式来执行。在执行过程中,脚本中的变量和函数将会在当前shell环境中被定义和使用。
其次是sh命令,它是Bourne Shell的简称,是一种常见的UNIX和Linux系统默认使用的shell。通常用于在当前shell环境中执行脚本,使用方式类似于"sh 脚本文件"。sh能够执行简单的脚本,但不支持一些高级特性,如数组、函数等。
bash是目前在Linux系统中广泛使用的shell,是Bourne-Again SHell的缩写。它是Bourne shell的增强版本,具有更多的特性和高级功能。bash可以执行sh脚本,同时也支持更多的特性。
最后是./执行脚本的方式,通常用于执行当前目录下的脚本。使用方式为"./ 脚本文件"。与source命令不同,当用./执行脚本时,将会开启一个新的子shell执行脚本文件,执行结束后子shell将会被关闭。
综上所述,四种不同的执行脚本的方式各有特点,可以根据需要选择适合的方式来执行脚本。
相关问题
pstree -p | grep bash bash sh4 echo $A chmod 700 sh4 ./sh4 echo $A source sh4 echo $A
这段命令行的作用是查找当前进程树中所有包含 "bash" 字符的进程,并将结果输出到管道中。然后通过管道过滤出包含 "bash" 字符的行,再使用 grep 命令匹配出其中包含 "bash" 字符的进程。接下来会输出当前 shell 进程及其父进程,以及一系列执行命令的进程。其中,echo $A 命令是输出环境变量 $A 的值,chmod 700 sh4 是修改 sh4 文件的权限为只有所有者可读、可写、可执行,./sh4 是运行当前目录下名为 sh4 的可执行文件,source sh4 是在当前 shell 环境下运行 sh4 脚本文件。最后再次执行 echo $A 命令输出环境变量 $A 的值。
.source与./scriptname.sh
在Linux环境下,`.source` 和 `./scriptname.sh` 是两种不同的运行shell脚本的方式:
1. ** sourcing (`.source`) **[^2]:
- 这种方式用于逐行读取并执行脚本中的内容,而不是创建一个新的进程。它主要用于在当前Shell会话中加载环境变量或函数定义,常用于shell脚本的交互式执行。
- 示例:
```shell
# 使用source加载hello_world.sh
source Linux/shell/codes/hello_world.sh
```
- 源码的优点是可以立即看到修改后的环境变量或函数效果,不需要额外权限。
2. **直接运行 (`./scriptname.sh`) **[^1]:
- 这是通过操作系统来执行一个.sh文件,通常创建一个新的子shell进程来运行脚本内容。
- 如果脚本声明了#!/bin/bash或其他shell解释器,并且具有执行权限(`x`),用户可以使用这种方式运行。
- 示例:
```shell
# 作为根用户或文件所有者,直接运行脚本
sudo ./Linux/shell/codes/hello_world.sh 或者 ./a.run
```
两者的主要区别在于作用域和执行方式:
- `.source` 只影响当前Shell会话,而`./scriptname.sh` 创建新进程独立运行。
- 如果脚本需要持久更改环境或需要交互,`.source` 更合适;如果是为了完成特定任务,如自动化操作,则可以直接运行。
阅读全文