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

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命令是直接可以改变环境变量的,运行在父进程上的,所以没有进程的销毁和创建的。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值