执行*.sh 文件的几种方式

sh filename.sh
./filename.sh(需要文件有执行权限)

上面的方法是通过建立子 shell 执行脚本中的语句,而以下方法是在当前 shell 中执行脚本内容。

. filename
source filename

source 命令

source 命令也称为“点命令”,也就是一个点符号(.),是 bash 的内部命令。

功能

使 Shell 读入指定的 Shell 程序文件并依次执行文件中的所有语句

usage
source filename

. filename
source filename 与 sh filename 及 ./filename 执行脚本的区别
  1. 当 shell 脚本具有可执行权限时,用 sh filename 与 ./filename 执行脚本是没有区别的。 ./filename 是因为当前目录没有在 PATH 中,”.”是用来表示当前目录的。
  2. sh filename 重新建立了一个子 shell,在子 shell 中执行脚本里面的语句,该子 shell 继承父 shell 的环境变量,但子 shell 新建的,改变的变量不会被带回父 shell。
  3. source filename 或 . filename 只是简单地读取脚本里的语句依次在当前 shell 里面执行,并没有建立新的子 shell。那么脚本里面所有新建,改变变量的语句都会保存在当前 shell 里面。
Example
  1. 新建 test.sh 脚本,内容为:A=1
  2. 然后使其可执行 chmod +x test.sh
  3. 运行 sh test.sh,然后 echo $A,显示为空,因为 A=1 并没有传给当前的 shell
  4. 运行 ./test.sh 效果是一样的
  5. 运行 source test.sh 或者 . test.sh,然后 echo $A,则会显示 1,说明 A=1 的变量在当前 shell 中

参考链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注