she编程执行方式

在一个脚本中怎么调用其余的脚本呢?有三种方式,分别是fork、source和execshell

1. fork

即经过sh 脚本名进行执行脚本的方式。下面经过一个简单的例子来说解下它的特性。 
建立father.sh,内容以下:bash

#!/bin/bashecho "父shell进程开始执行"sh son.sh #父shell fork子shell环境执行另外一个脚本echo "父shell进程执行完毕"

 

建立son.sh,内容以下:spa

#!/bin/bashecho "子shell被调用"

 

 

执行sh father.sh:code



[@sjs_59_152 ccztest]# sh father.sh父shell进程开始执行子shell被调用父shell进程执行完毕

 

经过以上例子,能够知道fork的特性为: 
        在一个脚本中调用另外一个脚本,被调用脚本执行完成以后返回给父shell进程,父shell进程继续执行剩下的指令进程

2. source

即经过source或. 脚本名进行执行脚本的方式。下面经过一个简单的例子来说解下它的特性。 
建立father.sh,内容以下:test

#!/bin/bash
source son.sh #经过source方式将son.sh加载到当前shell环境中
echo "father访问son中定义的局部变量:$sonVar"

 

建立son.sh,内容以下:变量


#!/bin/bashsonVar="son var"echo "son定义了一个变量:sonVar=$sonVar"

 

执行sh father.sh:脚本


[@sjs_59_152 ccztest]# sh father.shson定义了一个变量:sonVar=son varfather访问son中定义的局部变量:son var

经过以上例子,能够知道source的特性为: 
source调用,是把被调用脚本加载到当前的shell环境中来执行,就好像是在一个脚本里面运行同样,他们的定义的局部变量共享co

3. exec

即经过exec 脚本名进行执行脚本的方式。下面经过一个简单的例子来说解下它的特性。 
建立father.sh,内容以下:fork



#!/bin/bashecho "父shell开始执行"exec sh son.shecho "父shell完成执行,可是这句话不会被执行"

建立son.sh,内容以下:

#!/bin/bash

echo "子shell被父shell exec调用,执行权已经被抢占过来了,不会在交回给父shell进程"

执行sh father.sh:

[@sjs_59_152 ccztest]# sh father.sh

父shell开始执行

子shell被父shell exec调用,执行权已经被抢占过来了,不会在交回给父shell进程

经过以上例子,能够知道exec的特性为: 
exec调用,也是fork一个子shell环境来执行被调用脚本,可是父shell环境的执行权会被剥夺,也就是执行权被交给了被调用脚本,父shell环境再也不拥有执行权,不管父shell脚本中的指令是否执行完成,都不在被执行,随着子shell进程的结束而结束。

相关文章
相关标签/搜索