我们知道Shell脚本是一种解释性的语言,是不用编译的,那么它是如何执行程序的呢?

chmod u+x test.sh
./test.sh
  • Shell会fork()一个子进程,然后调用exec()执行,exec()会用把子进程的代码段替换成test.sh程序的代码段,然后开始执行,父进程等待子进程终止;
  • 但是由于test.sh是一个文本文件,并没有代码段和_start函数,这是exec()的另一种机制,如果要执行的是一个文本文件,并且第一行用shebang指定了解释器,则用解释器的代码替换当前进程,并从解释器的_start开始执行,这个文本文件被单做命令行参数传递给解释器。

有一种现象,在脚本中执行cd命令,发现回显消息当前所处的目录发生改变,但是真实的目录却没有变。

这也很好理解,父进程创建子进程来执行脚本,所以,子进程并没有改变父进程的目录。但是直接在命令行中cd,结果bash的目录是可以改变的,这是为什么?

  • 这是因为cd这条命令是不需要创建子进程的命令,这种命令叫做shell的内置命令或者叫内建命令,由父bash自己执行。


可以发现用.或者source修饰的脚本,脚本执行影响了父bash,source或者.命令是shell的内建命令,这种方式不会创建子Shell,而是直接在交互式Shell下逐行执行脚本中的命令。

Shell脚本工作原理相关推荐

  1. linux下shell的工作原理

              shell是用户和Linux操作系统之间的接口.Linux中有多种shell,其中缺省使用的是Bash.本章讲述了shell的工作原理,shell的种类,shell的一般操作及Ba ...

  2. linux shell 原理,linux下shell的工作原理

    linux下shell的工作原理 2009-12-8 10:19:53   出处:https://www.yqdown.com shell是用户和Linux操作系统之间的接口.Linux中有多种she ...

  3. 【跟晓月学shell脚本】掌握shell脚本变量原理及概念

    前言 跟晓月一起学shell,死磕shell脚本,让shell脚本学习不再难. 想学习更多shell脚本的案例,可以前往我的师父的shell脚本专栏:shell脚本从入门到实战-案例篇 文章目录 前言 ...

  4. python 解析模块脚本_Python pexpect模块及shell脚本except原理解析

    expect脚本 expect是什么 expect是一个免费的编程工具,用来实现自动的交互式任务,而无需人为干预.说白了,expect就是一套用来实现自动交互功能的软件. 在实际工作中,我们运行命令. ...

  5. shell 应用场景及工作原理

    Shell脚本,就是利用Shell的命令解释的功能,对一个纯文本的文件进行解析,然后执行这些功能,也可以说Shell脚本就是一系列命令的集合. Shell可以直接使用在win/Unix/Linux上面 ...

  6. 一篇文章学懂Shell脚本

    Shell脚本,就是利用Shell的命令解释的功能,对一个纯文本的文件进行解析,然后执行这些功能,也可以说Shell脚本就是一系列命令的集合. Shell可以直接使用在win/Unix/Linux上面 ...

  7. 一篇文章学懂Shell脚本,最简明的教程在这里

    Shell脚本,就是利用Shell的命令解释的功能,对一个纯文本的文件进行解析,然后执行这些功能,也可以说Shell脚本就是一系列命令的集合. Shell可以直接使用在win/Unix/Linux上面 ...

  8. 【跟晓月学shell脚本】掌握shell脚本变量实战案例

    前言 上篇文章我们探讨了shell脚本变量的基本原理和概念,本篇我们基于上面的内容增加一些实战. 如果你还没有学习shell脚本的变量理论,可以点击链接:[跟晓月学shell脚本]掌握shell脚本变 ...

  9. shell脚本监控CPU脚本

    在运维过程中,我们有时需要对CPU进行优化,啥时候优化呢? 自然是出问题的时候,那么啥时候出问题呢? 这个问题就可以使用我们的shell脚本了. 原理: 通过监视一段时间内CPU使用情况,找出长期占用 ...

最新文章

  1. oracle11g之管理oracle数据库笔记(理论基础知识)
  2. 分治习题--九章算法培训课第三章笔记
  3. windows popen 获取不到输出_彻底明白os.system、os.popen、subprocess.popen的用法和区别...
  4. 存储过程与事务应用两三事
  5. 声明式事务和编程式事务
  6. mysql 数据库学习(触发器)
  7. 二十五、PHP框架Laravel学习笔记——模型的一对一关联
  8. Android之创建选项菜单
  9. carplant_mxnet
  10. 当各大编程语言摆起地摊来……
  11. Qt5学习笔记之bin文件合成工具三:偏移量数据填充
  12. centos+darwin搭建简单的视频流服务器
  13. ADAMS搭建控制系统教程:偏心连杆机构的转速控制
  14. 【CS224n】(lecture1)课程介绍和word2vec
  15. 腾讯笔试题编程题——纸牌游戏
  16. iptables 实现主机防火墙(四表五链)
  17. Android之音频和视频的提取
  18. 【PyTorch】6.1 正则化之weight_decay
  19. 如何将IE浏览器设置为默认浏览器
  20. Android O新特性和行为变更总结zz

热门文章

  1. 南京工业大学计算机考研难吗,南京工业大学考研难吗?一般要什么水平才可以进入?...
  2. 淡马锡:48年新加坡「最强国企」,深入布局Web3
  3. 领导常说的这3种客套话,看似是夸你,其实是看你老实好忽悠
  4. 1级能力考试知识汇总
  5. Dell安装Alienware command center失败解决方案
  6. spring boot activiti7常见问题
  7. 第一集—HTML入门知识记录
  8. 讯飞语音 - 贾维斯
  9. python 多线程自动刷票程序
  10. JS——比较当前时间和历史时间