深入理解shell:source、sh、bash与./执行脚本的差异解析

28 下载量 182 浏览量 更新于2023-05-11 2 收藏 62KB PDF 举报
"这篇文章主要探讨了在Linux shell环境中,source、sh、bash以及./命令执行脚本的不同方式和效果。" 在Linux系统中,我们经常需要执行shell脚本来完成各种任务,而不同的执行方式会产生不同的行为。以下是这四种方法的详细解析: 1. **source命令** 或 **点命令 (.)**: source命令或点命令是shell中的内置命令,其作用是在当前shell会话中直接读取并执行指定文件(如`.bash_profile`)中的命令。这意味着,任何环境变量的更改、函数的定义等都会立即反映到当前会话中,无需退出并重新登录。当你更新了配置文件(如`.bashrc`)并希望新设置立即生效时,通常会使用source命令。 2. **sh命令** 和 **bash命令**: 这两个命令都是用来执行shell脚本,但它们会在新的子shell进程中运行文件。这意味着,即使脚本改变了环境变量,这些更改也不会影响到父shell,除非将这些变量通过export命令导出到环境变量中。sh是标准的Unix Bourne Shell,而bash是它的扩展,提供了更多的功能和语法糖。sh命令通常用于执行符合POSIX标准的脚本,而bash则更适合编写包含bash特定特性的脚本。使用`-n`选项,sh可以进行语法检查,`-x`选项则可以打印出脚本执行的每一条命令。 3. **./命令**: 使用`.`或`./`前缀执行脚本,会创建一个新的shell子进程来执行文件中的命令。这种方法最常用于可执行文件或具有执行权限的脚本。由于脚本在子shell中运行,因此它对环境的影响仅限于该子shell,不会影响到父shell。这种方式使得脚本可以在独立的环境中执行,不会干扰当前的shell会话。 4. **shell的其他内置命令**: 除了上述执行脚本的方式,shell还提供了一些内置命令,例如`break`和`continue`用于控制循环,`cd`改变当前工作目录,`echo`打印文本,`eval`执行字符串作为命令,`exec`替换当前shell进程,`export`将变量导入环境,`pwd`显示当前目录,`read`读取用户输入,`readonly`使变量不可变,`return`结束函数,`set`控制shell选项,以及`unset`删除变量。 了解这些命令的区别对于编写和调试shell脚本至关重要,特别是在管理环境变量、执行多任务或者确保脚本行为的一致性时。正确选择执行方式能够帮助优化脚本的效率和功能,并避免不必要的错误。