[转] 用source命令执行脚本和用sh执行脚本之间的区别
from: http://blog.csdn.net/david_xtd/article/details/8012627
问题:
有很多方式可以执行脚本,
1)。source test.bsh
2)。. test.bsh
3)。chmod a+x test.bsh;./test.bsh
4)。sh test.bsh
它们之间的差别是什么?
解决办法:
1. source命令的作用是读取并执行test.bsh中的命令;
该命令经常用点命令“.”来替代。
就是说,
# source test.bsh
与
# . test.bsh
的作用完全相同。
2. 用脚本文件名本身执行(如果shell脚本具有可执行权限)和用sh命令执行脚本的作用完全相同。
3. 用source命令执行脚本文件和用sh执行脚本文件的区别:
用source执行脚本文件,执行过程不另开进程,脚本文件中设定的变量在当前shell中可以看到;
用sh执行脚本文件,是在当前进程另开子进程来执行脚本命令,脚本文件中设定的变量在当前shell中不能看到。
比如:
test.bsh的内容如下:
#!/bin/bash
echo $$
tstvar=12345
以下是上面四种不同方式执行结果的差异:
dingq@wd-u1110:~/wrk/tmp$ echo $$
2375
dingq@wd-u1110:~/wrk/tmp$ unset tstvar;source tst_sh.bsh;echo $tstvar
2375
12345
dingq@wd-u1110:~/wrk/tmp$ unset tstvar;. tst_sh.bsh;echo $tstvar
2375
12345
dingq@wd-u1110:~/wrk/tmp$ unset tstvar;./tst_sh.bsh;echo $tstvar
5960 dingq@wd-u1110:~/wrk/tmp$ unset tstvar;sh tst_sh.bsh;echo $tst_var
5966 dingq@wd-u1110:~/wrk/tmp$
可以看到,当前进程ID为2375,用source和点命令(.)执行脚本时不改变当前进程,并且脚本中的变量可以看到;
而直接执行脚本文件和使用sh执行脚本时改变了当前进程,并且脚本中的变量不能看到;
问题解决。
[转] 用source命令执行脚本和用sh执行脚本之间的区别的更多相关文章
- shell脚本头,#!/bin/sh与#!/bin/bash的区别.
因为今天写了个小脚本,死活不成功,总是报文件或者目录不存在,问了一下我们马同学的正常写法,发现只有脚本头的区别,也就是今天本文要讲的#!/bin/sh与#!/bin/bash. 本文参考:https: ...
- shell脚本中执行source命令不生效的解决办法
一个shell脚本文件中有一个source命令,使用bash a.sh命令执行后source命令进行验证没有生效. 这是因为在shell脚本中执行source会看到效果,但是shell脚本执行完后再次 ...
- linux下shell脚本执行方法及exec和source命令
exec和source都属于bash内部命令(builtins commands),在bash下输入man exec或man source可以查看所有的内部命令信息. bash shell的命令分为两 ...
- Linux Shell脚本中点号和source命令
Linux中一个文件是根据其是否具有执行属性来判断他是否可以直接运行的.就像Windows下的exe一样.如果我们要执行某一个文件,可以先将其权限修改为可执行(必须是所有者或者root才能修改).然后 ...
- 为MySQL的source命令导入SQL文件配置参数
为MySQL的source命令导入SQL文件配置参数 执行 mysql -uroot -p 输入密码后进入 MySQL 命令提示符 set charset utf8; source /root/xxx ...
- Linux Source命令及脚本的执行方式解析
转 http://www.51testing.com/html/38/225738-206878.html 当我修改了/etc/profile文件,我想让它立刻生效,而不用重新登录:这时就想到用sou ...
- Linux下的Source命令及脚本的执行方式解析
Linux Source命令及脚本的执行方式解析 http://blog.csdn.net/wangyangkobe/article/details/6595143 当我修改了/etc/profile ...
- Linux Source命令及脚本的执行方式解析(转)
当我修改了/etc/profile文件,我想让它立刻生效,而不用重新登录:这时就想到用source命令,如:source /etc/profile对source进行了学习,并且用它与sh 执行脚本进行 ...
- Source命令及脚本的执行方式
[Source命令及脚本的执行方式] source filename 与 sh filename 及./filename执行脚本的区别在那里呢? 1.当shell脚本具有可执行权限时,用sh file ...
随机推荐
- WBS说明
work breakdown structure(WBS) 工作分解结构 (英语:Work Breakdown Structure, WBS)是一个详尽的,层次的(从全面到细节)的树形结构,由可交付成 ...
- SQL Database学习笔记
1. linux下快速安装MariaDB: MariaDB 是 一个采用 Maria 存储引擎的 MySQL 分支版本,是由原来 MySQL 的作者 Michael Widenius 创办的公司所 ...
- delphi服务程序(service)的调试方法
方法一: 1.调试delphi 写的服务程序,有这么一个办法.原来每次都是用attach to process方法,很麻烦.并且按照服务线程的执行线路,可能会停不到想要的断点.笨办法是,在proced ...
- 使用JDBC连接数据库
JDBC(Java Data Base Connectivity)数据库连接,我们在编写web应用或java应用程序要连接数据库时就要使用JDBC.使用JDBC连接数据库一般步骤有: 1.加载驱动程序 ...
- Mysql 应该选择什么引擎
对于如何选择存储引擎,可以简答的归纳为一句话:“除非需要用到某些INNODB 不具备的特性,并且没有其他办法可以替代,否则都应该选择INNODB 引擎”.例如:如果要用到全文索引,建议优先考虑INNO ...
- Activiti 工作流得到最后一次批注的时间
我们有时候在工作流开发中可能会遇到这样的需求,就是已经审批结束的流程,可能我们还是仍然需要修改业务表的结果,而且我们需要一个时间期限,比如:在5天内可以进行修改 ,这个时候我们就需要得到我们最后一步审 ...
- jquery validate 配合ligerui使用
这样当单击登录按钮时右边会弹出一个小框框,同时显示jquery扩展的下面那段代码错误内容,当添加内容正确后小框框消失,lable换成error也行 $("#form1").vali ...
- 50 Pow(x, n)(求x的n次方Medium)
题目意思:x为double,n为int,求x的n次方 思路分析:直接求,注意临界条件 class Solution { public: double myPow(double x, int n) { ...
- python运维开发之第三天
一.第二天课程的复习总结 1.列表可以增删改查,元组是不可修改的列表,字符串是不可以修改的. 2.列表,元组是有序的,字典是无序的,字典的key唯一 3.列表字典可以嵌套列表,可以嵌套字典,可以嵌套多 ...
- vector list array deque
因此在实际使用时,如何选择这三个容器中哪一个,应根据你的需要而定,一般应遵循下面 的原则: 1.如果你需要高效的随即存取,而不在乎插入和删除的效率,使用vector 2.如果你需要大量的插入和 ...