【Bash百宝箱】shell内建命令之句点与source
2016-09-19 20:30
603 查看
在shell中,内建(builtin)命令句点“.”和source用法相同,格式如下:
句点命令和source的作用相同,都是从脚本filename中读取命令并执行它们,若指定了参数arguments,参数便成为对应的位置参数。命令执行的退出状态为执行的最后一个命令的退出状态,没有执行任何命令时,退出状态为0,若filename不存在,退出状态为1,需要注意的是,这个脚本的执行是在当前shell环境下完成的,执行结果会影响当前shell,而普通的脚本执行则是在子shell中,执行结果不影响当前shell,下面举例说明两者的区别。
测试脚本test.sh:
普通用法:
使用source命令执行脚本:
从上面的例子中可以看出,使用source命令执行脚本的结果确实影响了当前shell,句点命令的效果是一样的,如果在shell脚本中定义了某些函数,这些函数是可以直接在当前shell中使用的。如下例子所示:
在Linux环境中,有时候我们要修改一些配置文件,比如说位于用户主目录下的bash配置文件“.bashrc”,这个文件的修改是在新的shell终端才生效的,这时就可以使用source命令执行这个文件,使之在当前shell立即生效。在许多开源项目中,都可以看到句点命令或source的用法,例如Android源码的编译。
. filename [arguments] source filename [arguments]
句点命令和source的作用相同,都是从脚本filename中读取命令并执行它们,若指定了参数arguments,参数便成为对应的位置参数。命令执行的退出状态为执行的最后一个命令的退出状态,没有执行任何命令时,退出状态为0,若filename不存在,退出状态为1,需要注意的是,这个脚本的执行是在当前shell环境下完成的,执行结果会影响当前shell,而普通的脚本执行则是在子shell中,执行结果不影响当前shell,下面举例说明两者的区别。
测试脚本test.sh:
#!/bin/bash var=test
普通用法:
$ var=foo $ echo $var foo $ bash test.sh $ echo $var foo
使用source命令执行脚本:
$ var=foo $ echo $var foo $ source test.sh $ echo $var test
从上面的例子中可以看出,使用source命令执行脚本的结果确实影响了当前shell,句点命令的效果是一样的,如果在shell脚本中定义了某些函数,这些函数是可以直接在当前shell中使用的。如下例子所示:
$ cat test.sh #!/bin/bash foo() { echo "function foo called" } $ . test.sh $ foo function foo called
在Linux环境中,有时候我们要修改一些配置文件,比如说位于用户主目录下的bash配置文件“.bashrc”,这个文件的修改是在新的shell终端才生效的,这时就可以使用source命令执行这个文件,使之在当前shell立即生效。在许多开源项目中,都可以看到句点命令或source的用法,例如Android源码的编译。
相关文章推荐
- 【Bash百宝箱】shell内建命令之冒号
- 【Bash百宝箱】shell内建命令之pwd、readonly、return、shift
- 【linux学习笔记】bash学习之login shell与non-login shell(source命令)
- 【Bash百宝箱】shell内建命令之break与continue
- 【Bash百宝箱】shell内建命令之help、type、let、logout
- 【Bash百宝箱】shell内建命令之echo、printf
- 【Bash百宝箱】shell内建命令之bind、enable、ulimit
- 【Bash百宝箱】shell内建命令之cd、getopts
- 【Bash百宝箱】shell内建命令之declare、typeset、local
- 【Bash百宝箱】shell内建命令之test
- 【Linux】Dockerfile,ubuntu默认shell不是bash?RUN source命令报错!
- 【Bash百宝箱】shell内建命令之hash
- 【Bash百宝箱】shell内建命令之alias与unalias
- 【Bash百宝箱】shell内建命令之builtin、command、caller
- 【Bash百宝箱】shell历史命令(history)
- 【Bash百宝箱】shell内建命令之read、readarray、mapfile
- 【Bash百宝箱】shell内建命令之set、shopt
- 【Bash百宝箱】shell内建命令之trap
- 【Bash百宝箱】shell内建命令之times、umask、unset
- 【Bash百宝箱】shell内建命令之eval、exec、exit、export