编译程序(五):1、source 是什么,source filename”、". filename”与“sh filename”、“./filename”的区别
一、source命令,也称“点命令”,也就是一个点符号(.),是bash的内部命令。
1、命令格式
source filename # filename必须是可执行的脚本文件
或者 . filename # 注意“.”号后面还有一个空格
2、source作用:
通知当前shell读入路径为filename的文件并依次执行文件中的所有语句。
通知库的路径并依次按照文件中的库的路径寻找库文件
...........
二、“source filename”、". filename”与“sh filename”、“./filename”这三个命令都可以用于执行一个脚本文件,那么它们之间的区别又如何呢?
当shell脚本具有可执行权限时,用sh filename与./filename是没有区别的。./filename是因为当前目录没有在PATH中,所以"."是用来表示当前目录的。sh filename会重新建立一个子shell,在子shell中执行脚本里面的语句,该子shell继承父shell的环境变量,但子shell是新建的,其改变的变量不会被带回父shell。
source filename读取脚本里面的语句依次在当前shell里面执行,没有建立新的子shell。那么脚本里面所有新建、改变变量的语句都会保存在当前shell里面。
也就是说:
1)“sh filename”、“./filename”在当前终端里,变量相当于是局部变量。
2)“source filename”、". filename”在当前终端里,里面的变量相当于全局定量,不论你是否定义export
举例如下:
1、创建 getbash文件如下
[test_pkuhpc@login12 test]$ cat getbash
#!/bin/bash
export PPP=ppp
DDD=ddd
2、source后的结果
[test_pkuhpc@login12 test]$ source getbash
[test_pkuhpc@login12 test]$ echo DDD=$DDD PPP=$PPP
DDD=ddd PPP=ppp
3、sh或者./getbash后的结果
退出终端重新登录
[test_pkuhpc@login12 test]$ exit ##退出重新登录
[test_pkuhpc@login12 test]$ sh getbash
[test_pkuhpc@login12 test]$ echo DDD=$DDD PPP=$PPP
DDD= PPP=
执行 ./getbash
[test_pkuhpc@login12 test]$ chmod u+x getbash
[test_pkuhpc@login12 test]$ ./getbash
[test_pkuhpc@login12 test]$ echo DDD=$DDD PPP=$PPP
DDD= PPP=
三、北京大学北极星高性能计算平台,source举例。
根据前面的定义,按照顺序执行,那么如果不使用系统的gcc的话,把自己定义的路径放在默认PATH前面:
[test_pkuhpc@login12 test]$ cat /appsnew/source/gcc-8.3.0.sh
#!/bin/bash
export LD_LIBRARY_PATH=/appsnew/usr/gcc/gcc-8.3.0/lib64:$LD_LIBRARY_PATH
export PATH=/appsnew/usr/cmake/cmake-3.14.3:/appsnew/usr/gcc/gcc-8.3.0/bin:$PATH
[test_pkuhpc@login12 2019test]$ which gcc
/bin/gcc
[test_pkuhpc@login12 2019test]$ gcc --version
gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-36)
----------------------------------------------------------------
[test_pkuhpc@login12 test]$ . /appsnew/source/gcc-8.3.0.sh
[test_pkuhpc@login12 test]$ which gcc
/appsnew/usr/gcc/gcc-8.3.0/bin/gcc
[test_pkuhpc@login12 2019test]$ gcc --version
gcc (GCC) 8.3.0
这样就变成非系统的gcc
四、北京大学北极星高性能计算平台source目录简介,见下篇,请点击