问大家一个关于source命令很基础的问题,我一直对这个命令比较模糊。什么情况下执行一个sh脚本不适用source命令?
我今天source ./A.sh 一直提示无法执行二进制文件,而直接./A.sh就可以运行。都知道这个命令可以用于配置当前环境变量,但是却不清楚不适用的情形或者是会带来什么问题。在线求解答!!!
我想我找到答案了。实际上Source相当于execute that reading from the file . 所以它并不要求file可执行,因为它只是从file读出来然后在当前shell prcess执行。不过它要求file必须是有效的shell script!!!
source命令用法:
source FileName
作用:在当前bash环境下读取并执行FileName中的命令。
注:该命令通常用命令“.”来替代。
如:source .bash_rc 与 . .bash_rc 是等效的。
注意:source命令与shell scripts的区别是,
source在当前bash环境下执行命令,而scripts是启动一个子shell来执行命令。这样如果把设置环境变量(或alias等等)的命令写进scripts中,就只会影响子shell,无法改变当前的BASH,所以通过文件(命令列)设置环境变量时,要用source 命令。
我写了一个 test.sh 内容是这样的
ls
cd /var/log
pwd
执行结果为
bin etc games include lib lib64 libexec local pgsql-9.3 sbin share src tmp
/var/log
然后再执行pwd结果如下
[logview@gitlab usr]$ pwd
/usr
而source+pwd之后结果如下
bin etc games include lib lib64 libexec local pgsql-9.3 sbin share src tmp
/var/log
[logview@gitlab log]$ pwd
/var/log
source 直接改变了路径