博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
exec、source以及bash的区别(zz)
阅读量:5872 次
发布时间:2019-06-19

本文共 1058 字,大约阅读时间需要 3 分钟。

在bash shell中,source、exec以及sh都可以用来执行shell script,但是它们的差别在哪里呢?

sh:父进程会fork一个子进程,shell script在子进程中执行
source:在原进程中执行,不会fork子进程
exec:在原进程中执行,但是同时会终止原进程

注:使用export会把父进程中的变量向子进程中继承,但是反过来却不行,在子进程中,不管环境如果改变,均不会影响父进程

 

下面用一个例子来讲解

 

[plain] 
 
  1. 1.sh  
  2. #!/bin/bash  
  3. A=B  
  4. echo "PID for 1.sh before exec/source/fork:$"  
  5. export A  
  6. echo "1.sh: \$A is $A"  
  7. case $1 in  
  8.         exec)  
  9.                 echo "using exec..."  
  10.                 exec ./2.sh ;;  
  11.         source)  
  12.                 echo "using source..."  
  13.                 . ./2.sh ;;  
  14.         *)  
  15.                 echo "using fork by default..."  
  16.                 ./2.sh ;;  
  17. esac  
  18. echo "PID for 1.sh after exec/source/fork:$"  
  19. echo "1.sh: \$A is $A"  

 

[plain] 
 
  1. 2.sh  
  2. CODE:  
  3. #!/bin/bash  
  4. echo "PID for 2.sh: $"  
  5. echo "2.sh get \$A=$A from 1.sh"  
  6. A=C  
  7. export A  
  8. echo "2.sh: \$A is $A"  

下面在命令行中去执行

 

./1.sh fork

可以看到,1.sh是在父进程中执行,2.sh是在子进程中执行的,父进程的PID是5344,而子进程的是5345,当子进程执行完毕后,控制权返回到父进程。同时,在子进程改变环境变量A的值不会影响到父进程。

 

./1.sh source

由结果可知,1.sh和2.sh都是在同一进程中执行的,PID为5367

 

./1.sh exec

可知,两个脚本都是在同一进程中执行,但是请注意,使用exec终止了原来的父进程,因此,可以看到

 

[plain] 
 
  1. echo "PID for 1.sh after exec/source/fork:$"  
  2. echo "1.sh: \$A is $A"  

这两个命令没有执行

 

 

由这个例子,便大致可了解它们的区别了

转载于:https://www.cnblogs.com/frankly-frank/p/4052351.html

你可能感兴趣的文章
ubuntu安装msql5.7
查看>>
6、Learn by doing才是正确的技术学习姿势
查看>>
"javax.servlet.http.HttpServlet" was not found
查看>>
简单介绍Linux进程文件路径的获取方法
查看>>
SpringMVC 过滤非法字符
查看>>
Rails测试《十》不能错过的杂七杂八
查看>>
ASP.NET自定义错误页面,分离配置信息,多环境发布
查看>>
我的友情链接
查看>>
free使用与解释
查看>>
SMP、NUMA、MPP体系结构介绍
查看>>
我的友情链接
查看>>
iOS开发之mac上搭建openfire服务器
查看>>
Linux中的configure、pkg-config、pkg_config_path
查看>>
动态路由 RIP的配置方法
查看>>
可视化与办公自动化学习
查看>>
Android Studio NDK 开发配置
查看>>
/var/spool/clientmqueue文件分析
查看>>
AndroidVector初探
查看>>
httpSession的正确理解
查看>>
HP 380 G5安装CentOS7时找不到P400 raid卡
查看>>