shell脚本中使用source和使用./cmd.sh区别

在shell脚本中,可以将函数分开到不同的脚本中,然后通过 source 指令或者 . 指令组合起来,相当于引用。

source.作用相同,都是只加载引用,但是不会直接执行。

不过,要注意的是,如果要直接执行引用的脚本,则在脚本中直接使用 sh xxxx.sh 或者 ./xxxx.sh 来执行。这种方式会启动一个子进程(subshell),所以其变量值是不能直接在主调脚本中使用,所以除非不交换数据,否则不推荐使用。

参考 Source命令与./区别 提供了一个很好的案例来解释两种方式的区别:

脚本cmd.sh,其内容如下:

# cmd.sh
function cmd1()
{
    echo "hello from cmd1"
}

照以下几种方式执行,看输出结果的区别。

$ ./cmd.sh
$ cmd1
cmd1:未找到命令

$ bash cmd.sh
$ cmd1
cmd1:未找到命令

$ source cmd.sh
$ cmd1
hello from cmd1

注意:

  • source命令是在当前进程中执行脚本文件中的各个命令,而不是另起 一个子进程(subshell)。

  • 其它两种方式则是另起一个子进程。

参考

Last updated