source命令是Bash的一个builtins,也称为文件包含:
通常用法:source filepath 或. filepath(一个小点)
功能:使当前shell读入路径为filepath的文件并依次执行文件中的所有语句;通常用于重新执行刚修改的初始化文件,使之立即生效,而不必注销并重新登录。例如,当我们修改了/etc/profile文件,并想让它立刻生效,而不用重新登录,就可以使用source命令,如source /etc/profile。
source命令(从 C Shell 而来)是bash shell的内置命令;点命令(.),就是个点符号(从Bourne Shell而来)是source的另一名称。
使用这个命令执行脚本即使没有执行权限也可以运行。
xinlin@ubuntu:~$ . BlogChecker/bin/activate
(BlogChecker) xinlin@ubuntu:~$
(BlogChecker) xinlin@ubuntu:~$ deactivate
xinlin@ubuntu:~$ source BlogChecker/bin/activate
(BlogChecker) xinlin@ubuntu:~$
而activate这个文件本身,默认是没有执行权限的:
xinlin@ubuntu:~/BlogChecker/bin$ ll
total 4416
drwxrwxr-x 2 xinlin xinlin 4096 May 18 06:26 ./
drwxrwxr-x 6 xinlin xinlin 4096 May 18 07:29 ../
-rw-rw-r-- 1 xinlin xinlin 2083 May 18 06:08 activate
-rw-rw-r-- 1 xinlin xinlin 1025 May 18 06:08 activate.csh
-rw-rw-r-- 1 xinlin xinlin 2179 May 18 06:08 activate.fish
-rw-rw-r-- 1 xinlin xinlin 1137 May 18 06:08 activate_this.py
-rwxrwxr-x 1 xinlin xinlin 245 May 18 06:26 chardetect*
-rwxrwxr-x 1 xinlin xinlin 254 May 18 06:08 easy_install*
-rwxrwxr-x 1 xinlin xinlin 254 May 18 06:08 easy_install-3.5*
-rwxrwxr-x 1 xinlin xinlin 236 May 18 06:08 pip*
-rwxrwxr-x 1 xinlin xinlin 236 May 18 06:08 pip3*
-rwxrwxr-x 1 xinlin xinlin 236 May 18 06:08 pip3.5*
lrwxrwxrwx 1 xinlin xinlin 7 May 18 06:08 python -> python3*
-rwxrwxr-x 1 xinlin xinlin 4464400 May 18 06:08 python3*
lrwxrwxrwx 1 xinlin xinlin 7 May 18 06:08 python3.5 -> python3*
-rwxrwxr-x 1 xinlin xinlin 2342 May 18 06:08 python-config*
-rwxrwxr-x 1 xinlin xinlin 233 May 18 06:08 wheel*
xinlin@ubuntu:~/BlogChecker/bin$
source命令与./和sh的区别
./xxxx,使用这个命令需要先将文件提升为可执行的文件才可以进行命令的使用
sh是一个shell,运行sh xxx.sh,表示使用sh来解释这个脚本,sh和source命令一样,没有执行权限也可以运行脚本。
下图是使用sh命令和source命令在执行上的区别:
sh命令和source命令在执行上的区别
如果直接运行./xxx.sh,首先会查找
举个例子,下面是一段python脚本a.run:
#!/usr/bin/python3
print("This is Python script")
用分别./和sh来执行:
xinlin@ubuntu:~$ ./a.run
This is Python Script
xinlin@ubuntu:~$sh a.run
a.run: line 2: syntax error near unexpected token `"This is Python Script"'
a.run: line 2: `print("This is Python Script")'
因为这是一个python脚本,sh是看不懂的(注意,linux下后缀通常不是很严格,.run后缀是我随意命名的,和windows有点区别)。
以上基本说清楚了source命令的各方面情况。