bash学习之三:source命令的真谛
来源:互联网 发布:org.apache.shiro jar 编辑:程序博客网 时间:2024/05/16 15:08
source命令,也就是那个“.”的作用就是执行一个脚本,难道它仅仅是执行一个脚步吗?当然不是。
source命令确实是执行了一个脚本,但它和普通的执行一个脚本是有区别的,看看下面的输出:
wangjk@wangjiankun:~/scripts$ echo $NAME
wangjk@wangjiankun:~/scripts$ echo $COLOR
wangjk@wangjiankun:~/scripts$ cat -n soure_test.sh
1 #!/bin/bash
2
3 echo "I will explain the command source"
4 echo
5
6 echo "Define the variable COLOR == black and NAME == Wangjiankun"
7
8 export COLOR="black"
9 export NAME="Wangjiankun"
10
11 echo "$COLOR"
12 echo "$NAME"
wangjk@wangjiankun:~/scripts$ ls -l
total 4
-rw-r--r-- 1 wangjk wangjk 203 Jul 6 18:35 soure_test.sh
wangjk@wangjiankun:~/scripts$ source soure_test.sh
I will explain the command source
Define the variable COLOR == black and NAME == Wangjiankun
black
Wangjiankun
wangjk@wangjiankun:~/scripts$ echo $NAME
Wangjiankun
wangjk@wangjiankun:~/scripts$ echo $COLOR
black
wangjk@wangjiankun:~/scripts$
不知你是否从上面的输出中看出来了蹊跷!要是,恭喜您!
我们重点看红色部分。上面的输出有两点值得研究:1、没有执行权限的脚本可以被source命令执行;2、被source命令执行的脚本声明的变量在脚本执行完成推出后仍然有效。对比非source命令执行的同一个脚本的输出如下:
wangjk@wangjiankun:~/scripts$ echo $NAME
wangjk@wangjiankun:~/scripts$ echo $COLOR
wangjk@wangjiankun:~/scripts$ ls -l
total 4
-rw-r--r-- 1 wangjk wangjk 203 Jul 6 18:35 soure_test.sh
wangjk@wangjiankun:~/scripts$ ./soure_test.sh
-bash: ./soure_test.sh: Permission denied
wangjk@wangjiankun:~/scripts$ chmod u+x soure_test.sh
wangjk@wangjiankun:~/scripts$ ./soure_test.sh
I will explain the command source
Define the variable COLOR == black and NAME == Wangjiankun
black
Wangjiankun
wangjk@wangjiankun:~/scripts$ echo $NAME
wangjk@wangjiankun:~/scripts$ echo $COLOR
wangjk@wangjiankun:~/scripts$
综上所述:source命令可以执行没有执行权限的脚本;source命令执行的脚本的环境可以保存下来。
究其原因,source命令在执行脚本时,并没有创建新的子进程。原文描述如下:
If you don’t want to start a new shell but execute the script in the current shell, you source it:
source script_name.sh
The script does not need execute permission in this case. Commands are executed in the current shell context, so any changes made to your environment will be visible when the script finishes execution.
- bash学习之三:source命令的真谛
- 【linux学习笔记】bash学习之login shell与non-login shell(source命令)
- Linux学习笔记之基本命令三(Bash Shell)
- bash 点号(.)和source命令的使用
- 【Bash百宝箱】shell内建命令之句点与source
- 【Linux基础学习之三】Bash的一些基础知识总结(通配符、重定向、管道、命令补全)
- Linux学习之道: ubuntu下source、sh、bash、./执行脚本的区别
- 关于Bash中的source命令
- Shell[三]: source命令
- linux中source、bash命令区别
- shell中“source”、“.”和“bash”命令
- linux中的source、sh、bash、./命令
- linux中source、bash命令区别
- linux中source、bash命令区别
- #!/bin/bash和#!/bin/sh的区别,source命令和exec命令
- 毕业设计之mysql的source命令
- 【linux学习笔记】bash学习之read命令
- 【鸟哥的linux私房菜-学习笔记】Bash shell之管线命令
- ASCII表 + WindowsAPI函数清单
- 不重装,不还原,不优化,让你的系统比重装还爽
- windows的缓存管理
- 收藏 不显示删除回复显示所有回复显示星级回复显示得分回复 有损脑健康的七种坏习惯
- PHP建站不再难 国外优秀开源PHP建站程序一览
- bash学习之三:source命令的真谛
- Linux操作系统为何对计算机病毒免疫
- 所有程序员都应该至少读上两遍的十篇论文
- [双语阅读]奥巴马缅怀杰克逊 杰出才华伴悲剧人生
- 傻逼黑客群
- go go go
- 2008年1月11日
- 2008年1月15日(12、13、14日没写)
- 右耳听进的比左耳多