Wetts's blog

Stay Hungry, Stay Foolish.

0%

Linux-命令-source.md

转自:https://www.jianshu.com/p/a3fbb3af9ab7

经常会看到在修改了某些环境变量之后会执行source命令,到底source命令做了那些事?让我们来探究一下。

source的作用

source命令:

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

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

使用范例:

source filename

. filename(中间有空格)

注意:上述两种表达方式都是正确的并且等效的

为什么在修改了环境变量后执行source命令

例如当我修改了 /etc/profile 文件,我想让它立刻生效,而不用重新登录;这时就想到用 source 命令,如:source /etc/profile。这样就重新执行刚修改的初始化文件,使之立即生效

source filenamesh filename./filename 执行脚本的区别在那里呢?

  1. 当shell脚本具有可执行权限时,用 sh filename./filename 执行脚本是没有区别得。./filename 是因为当前目录没有在 PATH 中,所有”.”是用来表示当前目录的。

  2. sh filename 重新建立一个子 shell,在子 shell 中执行脚本里面的语句,该子 shell 继承父 shell 的环境变量,但子 shell 新建的、改变的变量不会被带回父 shell,除非使用 export。

  3. source filename:这个命令其实只是简单地读取脚本里面的语句依次在当前 shell 里面执行,没有建立新的子 shell。那么脚本里面所有新建、改变变量的语句都会保存在当前 shell 里面。(当这个 shell 关闭后就失效了)

举例说明:

  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 中。