【转载】source执行shell脚本原理

【转自】https://blog.csdn.net/xy913741894/article/details/73849441

shell脚本运行的原理(source命令等)

2017年06月28日 16:29:36

阅读数:2454

Shell英文意思是外壳, 用户可以通过Shell和操作系统交互,通俗的讲Shell就是一个解释器,当我们输入命令Shell就解释执行,Shell有很多版本,我们一般使用的都是bash,在Linux输入一条命令可以查看当前正在使用的Shell:

echo $SHELL
  • 1

屏幕会出现:

/bin/bash
  • 1

Shell有两种方式:

这里写图片描述

因此,我们主要来学习Shell脚本编程。


在理解Shell脚本运行的原理之前,我们必须得先搞清楚shell运行的原理:

当我们在Linux下输入:

ls -al 或者 cd ..
  •  

到底发生了什么?

在解释原理之前,我们必须分清楚的是:我们在Linux输入的命令是有区别的,具体来说,分为内部命令(built-in)以及外部命令,向ls,cat,mkdir这些都属于外部命令,而echo,cd,pwd这些都属于内置命令,如何区分这些命令是否是内置,外部命令,可以利用type命令来辨别

这里写图片描述

输入ls,cd这些内部或者外部的命令有什么区别?具体而言:

像cd,pwd这些内置命令是属于Shell的一部分,当Shell一运行起来就随Shell加载入内存,因此,当我们在命令行上输入这些命令就可以像调用函数一样直接使用,效率非常高。

而如ls,cat这些外部命令却不是如此,当我们在命令行输入cat,当前的Shell会fork一个子进程,然后调用exec载入这个命令的可执行文件,比如bin/cat,因此效率上稍微低了点。


理解了单个命令的运行原理,我们现在探究当编写一个Shell脚本运行的原理,首先需要的说明的是,Shell,和Python一样,都是一门解释性语言,所谓的解释性语言就是不用编译,执行一行解释一行。

当我们编写一个Shell脚本test.sh,比如:

#!/bin/bash

echo "hello"
ls -al

在Linux命令输入./ test.sh时(需要加可执行权限)时,我们在这个文本文件开头指定了bash为默认的解释器,因此当前的交互式Shell会fork一个子进程,用bash解释器的代码去替换(也就是exec),而这个文本文件被当作是命令行参数传给这个子bash,等这个子bash执行完就会到我们的交互式bash了。

为了验证我们所说的交互式bash会fork/exec一个子bash来执行命令而非交互式bash,我们做个测试:

1.直接在交互式bash输入:

cd ..
  •  

2.编写脚本test.sh,然后运行:

//其中test.sh内容如下:

#!/bin/bash
cd ..

在Linux命令行输入 ./test.sh

结果如下:

这里写图片描述

我们发现同样都是cd ..,为什么执行完脚本当前bash目录不变,这就证明了我们所说的是由子bash执行,而非交互式bash,那么如何交互式bash执行脚本呢,我们可以使用. 或者source命令,如下图:

这里写图片描述

这里写图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值