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等等。命令行在执行外部命令时,会创建一个进程,在执行过程中,就有了进程的创建和消亡。我们细细说明一下这个过程:(很重要)

创建一盒shell进程的子进程

在子进程中查找外部命令在文件中的位置

在子进程中,用新程序取代shell拷贝并执行相应的程序,父进程进入休眠状态,等待子进程完毕。

子进程销毁,返回

我们会发现,在这个过程中,父进程的属性(也就是环境变量)没有改变,因为子进程没办法改变父进程的环境变量。

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

source cd.sh

#或者

. cd.sh

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

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181119G085KD00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

同媒体快讯

扫码关注云+社区

领取腾讯云代金券