目录
1. source命令
source .bash_profile
. .bash_profile两者等效。
source(或点) 命令通常用于重新执行刚修改的初始化文档。
使用source或 . 命令时,你可以在当前Shell中直接运行一个Shell脚本,而不需要给脚本添加执行权限。这就像是把脚本内容直接放到当前Shell中执行一样。
source script_a.sh
或者
. script_a.sh
注意,在 . 命令和脚本文件之间有一个空格。
2. sh/bash命令
通过sh或bash命令执行脚本时,会在一个新的子Shell中运行脚本,而且脚本不需要有执行权限。子Shell是一个独立的执行环境,脚本中设置的变量不会影响到父Shell。
sh script_a.sh
或者
bash script_a.sh
3. ./方式
使用./方式执行脚本时,会在一个新的子Shell中运行脚本,但是此时脚本需要有执行权限。可以使用chmod +x添加执行权限。
chmod +x script_a.sh
./script_a.sh
另外,使用./方式执行的文件如果包含alias语句,Shell不会将alias别名扩展成对应的命令。解决这个问题可以使用shopt命令开启alias扩展选项:
shopt -s expand_aliases
shell 脚本各种执行方式(source ./*.sh, . ./*.sh, ./*.sh)的区别
结论一: ./*.sh的执行方式等价于sh ./*.sh或者bash ./*.sh,此三种执行脚本的方式都是重新启动一个子shell,在子shell中执行此脚本,脚本中设置的变量在脚本执行完毕后不会保存。但是若 script.sh 脚本不是以 #!/bin/bash 开头,那么也不会在子进程中执行。
结论二: source ./*.sh和 . ./*.sh的执行方式是等价的,即两种执行方式都是在当前shell进程中执行此脚本,而不是重新启动一个shell 在子shell进程中执行此脚本,并且脚本中设置的变量在脚本执行完毕后会保存下来。