小鸟初学Shell编程(三)脚本不同执行方式的影响
执行命令的方式
执行Shell脚本的方式通常有以下四种
- 方式一:
bash ./test.sh - 方式二:
./test.sh - 方式三:
source ./test.sh - 方式四:
. ./test.sh
执行方式的区别
方式一bash方式执行脚本的话,会在当前的终端下面产生一个bash子进程来运行脚本,所以对当前的环境是没有影响的。
[root@lincoding usr]# bash ./test.sh
方式二./test.sh的方式运行,则脚本第一行声明是哪个Shell解释器就会产生哪个Shell解释器的子进程来运行脚本,如果声明的Shell解释器是bash,则与方式一类似。
[root@lincoding usr]# ./test.sh
方式三和方式四执行的时候,和上面的方式一和方式略有点不同。
因为他执行的时候是通过当前的终端来执行Shell脚本的,不会产生子进程,所以会当前的环境是有影响的。
[root@lincoding usr]# source ./test.sh
[root@lincoding usr]# . ./test.sh
执行方式的影响对比
上述也提及到了方式一和方式二,由于是会产子进程来执行Shell脚本,所以对当前的环境是没有影响的;而方式二和方式三,是在当前的终端执行Shell脚本,所以是会对当前的环境是有影响的。
举个栗子,编写一个切换目录的test.sh脚本,内容如下
#!/bin/bash
# 切换到tmp目录
cd /tmp
# 打印当前目
pwd
那么使用方式一执行test.sh脚本,其结果如下:
[root@lincoding /]# bash test.sh
/tmp
[root@lincoding /]# pwd
/
可以发现,使用方式一去执行脚本,不需要给予执行权限。
方式二执行test.sh脚本,其结果如下:
[root@lincoding /]# chmod u+x test.sh
[root@lincoding /]# ls -l test.sh
-rwxr--r--. 1 root root 64 Sep 26 18:34 test.sh
[root@lincoding /]# ./test.sh
/tmp
[root@lincoding /]# pwd
/
方式一和方式二执行完切换到/tmp目录的Shell脚本后,终端所在的目录没有变化,还是在/根目录,说明方式一和方式二的执行方式是对当前的环境是没有影响的。
原因就是方式一和二执行Shell脚本时,会产生子进程来执行Shell脚本,当脚本执行结束后,子进程退出,回到了父进程,那么对当前所在的环境就不会产生影响。
接下来看,方式三执行结果:
[root@omp120 /]# source ./test.sh
/tmp
[root@omp120 tmp]# pwd
/tmp
方式四执行结果:
[root@omp120 /]# . ./test.sh
/tmp
[root@omp120 tmp]# pwd
/tmp
从上面方式三和方式四的执行结果,可以发现,执行完切换到/tmp目录的Shell脚本后,当前的终端环境所在的目录已经被切换了到了/tmp目录,说明方式三和方式四的执行方式是对当前的环境是有影响的。
小结
方式一和方式二执行Shell脚本时,会产生子进程来执行Shell脚本,当脚本执行结束后,子进程退出,回到了父进程,那么对当前所在的环境就不会产生影响。
而方式二和方式四是在当前环境执行Shell脚本,也就是在当前进程执行Shell脚本,其执行的结果就会影响当前的环境。
小鸟初学Shell编程(三)脚本不同执行方式的影响的更多相关文章
- 小鸟初学Shell编程(七)变量引用及作用范围
变量引用 那么定义好变量,如何打印变量的值呢?举例下变量引用的方式. ${变量名}称作为对变量的引用 echo ${变量名}查看变量的值 ${变量名}在部分情况下可以省略成 $变量名 [root@li ...
- 小鸟初学Shell编程(二)编写简单的Shell脚本
Shell脚本 编写Python.PHP脚本通常需要掌握语言的函数,那么Shell脚本则不需要,只需要掌握Linux命令就可以编写Shell脚本,因为Shell脚本就是由多个Linux命令组成,通过将 ...
- 小鸟初学Shell编程(八)环境变量、预定义变量与位置变量
环境变量 环境变量:每个Shell打开都可以获得到的变量. 我们知道通过export的方式打开可以让子进程读取父进程的变量的值,那怎么样才能让每一个进程都能读取到变量的值呢? 在这呢,系统有一些默认的 ...
- 小鸟初学Shell编程(四)管道符
管道作用 管道实际上就是进程之间的一个通信工具,那么用在Linux命令中主要是方便两条命令互相之间可以相互通信. 管道符 管道符(匿名管道)是Shell编程经常用到的通信工具. 管道符是"| ...
- 小鸟初学Shell编程(一)认识Shell
开篇介绍 Linux里非常的有用的一个功能,这个功能就叫Shell脚本. Shell脚本在我日常开发工作里也占了非常重要的角色,项目中一些简单的工作我们都可以使用Shell脚本来完成,比如定时删除日志 ...
- 小鸟初学Shell编程(五)输入输出重定向
重定向作用 一个进程默认会打开标准输入.标准输出.错误输出三个文件描述符. 重定向可以让我们的程序的标准输出.错误输出的信息重定向文件里,那么这里还可以将文件的内容代替键盘作为一种标准输入的方式. 重 ...
- 小鸟初学Shell编程(六)变量赋值
变量的意义 我们在使用Linux命令或脚本的时候,会有一些输出,那么这些输出的信息可以用变量临时存储,以备我们下一条命令或脚本使用. 变量的定义 变量的定义建议用一个有意义的英文单词来代表变量,不要使 ...
- 小鸟初学Shell编程(九)环境变量变量配置文件
介绍 在上一篇使用完了环境变量,并且知道PATH环境变量概念,那么我们对命令的执行就有了一定深入的理解.那么PATH环境变量或其他环境变量是保存在哪呢?那么这篇文章主要介绍环境变量配置文件. 配置文件 ...
- Shell编程-01-Shell脚本初步入门
目录 什么是Shell 什么是Shell脚本 Shell脚本语言的种类 常用操作系统默认Shell Shell 脚本的建立和执行 脚本规范 什么是Shell 简单来说Shell其实就是一个命令 ...
随机推荐
- ICMP重定向 Redirect netwox libpcap netwag
搭建环境 两台虚拟机. 攻击者:192.168.1.8 被攻击者:192.168.1.9 网络配置 主机均采用DHCP 如果没有路由器,可以使用NAT模式来做 攻击者配置 打开转发数据包功能 # su ...
- 【团队项目3】需求改进&系统设计
一.需求 & 原型改进 1.针对课堂讨论环节老师和其他组的问题及建议,对修改选题及需求进行修改 根据用户反馈,我们针对如下问题做了修改: 问题1:如何保证机构是否是官方的?平台是否有监管? 修 ...
- SQL Server阻塞的检查
1. 阻塞 除了内存.CPU.I/O这些系统资源以外,阻塞和死锁是影响数据库应用性能的另一大因素. 所谓的「阻塞」,是指当一个数据库会话中的事务,正在锁定其他会话事务想要读取或修改的资源,造成这些 ...
- [Go] gocron源码阅读-go语言web框架Macaron
gocron源码中使用的是马卡龙框架,下面这个就是安装这个框架,和一般的MVC框架很像go get gopkg.in/macaron.v1git clone https://github.com/go ...
- 16.Java基础_对象内存图
单个对象 1.进入main函数,生成main函数的栈空间 2.先在mian函数的栈空间里产生一个Student变量(以后会用来存储Studnet对象的首地址),然后进入Student类,在堆内存创建S ...
- 【hdu3311】Dig The Wells(斯坦纳树+dp)
传送门 题意: 给出\(n\)个重要点,还有其余\(m\)个点,\(p\)条边. 现在要在这\(n+m\)个点中挖几口水井,每个地方的费用为\(w_i\).连接边也有费用. 问使得这\(n\)个地点都 ...
- PHP连接Navicat For Mysql并取得数据
Navicat For Mysql中新建数据库 数据库中新建表 保存表 表中添加数据 打开ide,输入以下php代码,使用localhost打开该php文件 <?php // ip地址.用户名. ...
- C++学习五 const vector<int>类型的迭代器使用
一情景: 算法功能:对于传入的vector, 能够找到两个数字,使其相加之和为target,然后返回这两个数字的位置(也就是秩) 最开始是这样的一个问题: 对于一个传入的const vector< ...
- Kvm命令集管理虚拟机
KVM虚拟机配置文件位置 [root@localhost ~]# ll /etc/libvirt/qemu/ 总用量 drwxr-xr-x root root 12月 : autostart drwx ...
- mysql high severity error 缺少根元素
high severity error 缺少根元素: C:\Users\cf.yu\AppData\Roaming\Oracle\MySQL Notifier里的settings.config.删除他 ...