美文网首页shell脚本编程
shell脚本学习第二弹-神奇的cd

shell脚本学习第二弹-神奇的cd

作者: CPP后台服务器开发 | 来源:发表于2018-11-16 09:08 被阅读3次

    shell脚本学习第二弹-神奇的cd


    前言:作为一个linux程序员,估计用的最多的命令就是cd了吧,我们试着用脚本编译一下:

      1 #!/bin/bash
      2 pwd
      3 
      4 cd /home
      5 pwd
    
    

    我们看一下结果:

    /data/shell
    /home
    

    但是我们本地的shell中执行pwd:

    /data/shell
    

    咦!!!什么鬼??


    相信这个问题大家也有人遇到过,我们就从原理上一一深入理解,解决问题。


    我们首先看看shell命令的种类:
    1.内建命令,顾名思意,就是shell内部包含的命令,就比如我们的cd命令就是一种,它改变了shell的属性设置,内建命令在执行的时候没有进程的创建和销毁。
    2.shell函数编写的程序代码,也就是我们要学习的shell脚本。
    3.外部命令。这个是我们的主角,他是独立于shell的可执行程序,比如find等等。命令行在执行外部命令时,会创建一个进程,在执行过程中,就有了进程的创建和消亡。我们细细说明一下这个过程:(很重要)

    1. 创建一盒shell进程的子进程
    2. 在子进程中查找外部命令在文件中的位置
    3. 在子进程中,用新程序取代shell拷贝并执行相应的程序,父进程进入休眠状态,等待子进程完毕。
    4. 子进程销毁,返回
      我们会发现,在这个过程中,父进程的属性(也就是环境变量)没有改变,因为子进程没办法改变父进程的环境变量。

    有了上面的基础,我们就只到为什么脚本中cd在当前命令行是无效的了。那么,想要他有效,还有一种办法,就是用source来执行。

    source cd.sh
    #或者 
    . cd.sh 
    
    

    source命令是直接可以改变环境变量的,运行在父进程上的,所以没有进程的销毁和创建的。

    相关文章

      网友评论

        本文标题:shell脚本学习第二弹-神奇的cd

        本文链接:https://www.haomeiwen.com/subject/cyepfqtx.html