如题
nginx的configure脚本中有用到have=NGX_SBIN_PATH value="\"$NGX_SBIN_PATH\"" . auto/define
这样的命令,中间的“.”是个什么意思?
在用终端的时候,如果在~/.bashrc中设置了一些终端参数后不想重新登录而让配置生效,比如设置了alias vi='vim'
,只需要这样source ~/.bashrc
一下就能让当前shell使用新的配置,source命令是干嘛的?
其实上面nginx中的“.”就是source命令,而source命令是bash的内置命令,它的作用是在当前shell环境中读取文件中的命令并执行。这里边有两点:1)是在当前shell环境执行文件中的命令,而不是像./xxx.sh
或是sh xxx.sh
这样在当前shell派生出的子shell中执行。2)是文件中都应该是shell可执行的命令,也就是说source会把文件中的文本都当成shell命令来执行。
同样是执行命令,source跟./xxx.sh
或sh xxx.sh
有什么不同呢?最大的不同就是前者在文件中设置的变量对当前shell是可见的,而后者设置的变量对当前shell是不可见的。要知道./xxx.sh
和sh xxx.sh
都是在当前shell的子shell中执行的,子shell中的变量不会影响父shell,而source是把文件中的命令都读出来一个个执行,所有的变量其实就是在父shell中设置的。比如说如下的一个xxx.sh文件:
1 | #!/bin/sh |
- 执行
./xxx.sh
或sh xxx.sh
echo $test
,发现为空- 执行
source xxx.sh
或. xxx.sh
echo $test
,可以看到test的值在当前shell中是存在的
参考:
- Bash-Builtins: source
[Linux Source命令及脚本的执行方式解析](http://www.51testing.com/html/38/225738-206878.html)