木其网络科技专业程序员代写http://www.xmsydw.com
程序员学历擅长经验网店链接
apenny硕士ASP.NET PHP 电子 通信设计 图像 编程 网络5年进入店铺
zheng_qianqian本科C语言 C++面向对象 Java3年进入店铺
guoguanl本科Java Web项目 JSP Hibernate Struts Mysql4年进入店铺

用source命令执行脚本和用sh执行脚本之间的区别

问题:

有很多方式可以执行脚本,

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执行脚本时改变了当前进程,并且脚本中的变量不能看到;


问题解决。






posted @ 2012-09-24 14:05  C语言程序  阅读(634)  评论(0编辑  收藏  举报
木其网络科技专业程序员代写http://www.xmsydw.com
程序员学历擅长经验网店链接
apenny硕士ASP.NET PHP 电子 通信设计 图像 编程 网络5年进入店铺
zheng_qianqian本科C语言 C++面向对象 Java3年进入店铺
guoguanl本科Java Web项目 JSP Hibernate Struts Mysql4年进入店铺