shell脚本中sourceexecfork区别

Posted 阿铭linux

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell脚本中sourceexecfork区别相关的知识,希望对你有一定的参考价值。

问题场景为:

两个脚本,A脚本和B脚本,想要在A脚本中调取B脚本,那调取的方法有三种方式:source、exec和fork。


先分别把脚本内容发出来:

cat A_source.sh

#!/bin/bash

##test source  exec fork

echo "source B.sh begin"

export a=1

source ./B.sh

echo "A.sh b is $b"

echo "source B.sh end"


cat A_exec.sh

#!/bin/bash

##test source  exec fork

echo "exec B.sh begin"

export a=1

exec ./B.sh

echo "A.sh b is $b"

echo "exec B.sh end"


cat A_fork.sh

#!/bin/bash

##test source  exec fork

echo "fork B.sh begin"

export a=1

./B.sh

echo "A.sh b is $b"

echo "fork B.sh end"


cat  B.sh

#!/bin/bash

b=2

echo "a is $a"

echo "b is $b"


再执行脚本之前,需要把A.sh和B.sh放到一个目录下,并且B.sh给x权限。


执行结果如下:

sh source_A.sh

source B.sh begin

a is 1

b is 2

B.sh b is 2

source B.sh end


sh exec_A.sh

exec B.sh begin

a is 1

b is 2


sh fork_A.sh 

fork B.sh begin

a is 1

b is 2

1.sh b is 

fork B.sh end


在这里,阿铭要再给大家说两个知识点就是:

1. source  B.sh 和  .  B.sh 是一样的效果。 你没错,这里B.sh前面是一个点,这个点的作用和source是一样的。

2. fork B.sh 和./B.sh和sh ./B.sh 是一样的效果。


通过上面的实验,总结如下结论:

1. source、fork和exec都是在一个脚本中调用第二个脚本(B.sh)

2. source、fork执行完第二个脚本(B.sh)后,会继续往下执行父脚本(A.sh),而exec执行完第二个脚本(B.sh)不再继续执行父脚本(A.sh)

3. source的时候,会把第二个脚本(B.sh)里面的变量带出来给父脚本(A.sh),fork并不会把第二个脚本中(B.sh)的变量带出来给父脚本(A.sh)

以上是关于shell脚本中sourceexecfork区别的主要内容,如果未能解决你的问题,请参考以下文章

shell和shell脚本 有啥区别啊

shell脚本中-和--有啥区别呢?

执行shell脚本三种方法的区别:(sh、exec、source)

shell脚本中单引号和双引号的区别

shell脚本中 的 单引号和反引号经常混淆,请高手帮我区别它们的功能,谢谢

shell脚本中单引号和双引号的区别