Shell脚本学习笔记——符号(2)

在Shell中,有一种奇怪的现象,当我们在myshell.sh中输入如下代码,保存并退出。

pwd
cd ..
pwd

运行代码,可以看到如下现象:


脚本执行cd命令,发现回显消息当前所处的目录发生改变,但是实际上,真实目录并没有改变。其实这也很好理解,在上一篇博客中,我们提到了,执行的本质原理是Shell会fork一个子进程来解释脚本。

但是,如果我们直接在命令行执行cd命令,就会发现,父bash的工作目录发生了改变:

Shell脚本学习笔记——符号(2)_第1张图片

这又如何理解呢?

其实,归根结底,执行命令不一定要创建子进程。

不需要创建子进程的命令,叫做Shell的内置命令,由父bash亲自执行。

可是,如果我们就是想通过执行程序的方式来达到这种效果呢?我们就可以用下面这条命令:


此时我们就可以发现,工作目录发生了变化。这就达到了我们想要达到的效果。

source的作用是在当前bash环境下读取并执行FileName中的命令,该FileName文件可以没有“执行权限”。

注:该命令通常用命令 . 来替代。

source或 . 命令是Shell的内建命令,这种方式不会创建子Shell,而是直接在交互式Shell下逐行执行脚本中的命令。





你可能感兴趣的:(Shell脚本)