执行命令的方式

执行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编程(三)脚本不同执行方式的影响的更多相关文章

  1. 小鸟初学Shell编程(七)变量引用及作用范围

    变量引用 那么定义好变量,如何打印变量的值呢?举例下变量引用的方式. ${变量名}称作为对变量的引用 echo ${变量名}查看变量的值 ${变量名}在部分情况下可以省略成 $变量名 [root@li ...

  2. 小鸟初学Shell编程(二)编写简单的Shell脚本

    Shell脚本 编写Python.PHP脚本通常需要掌握语言的函数,那么Shell脚本则不需要,只需要掌握Linux命令就可以编写Shell脚本,因为Shell脚本就是由多个Linux命令组成,通过将 ...

  3. 小鸟初学Shell编程(八)环境变量、预定义变量与位置变量

    环境变量 环境变量:每个Shell打开都可以获得到的变量. 我们知道通过export的方式打开可以让子进程读取父进程的变量的值,那怎么样才能让每一个进程都能读取到变量的值呢? 在这呢,系统有一些默认的 ...

  4. 小鸟初学Shell编程(四)管道符

    管道作用 管道实际上就是进程之间的一个通信工具,那么用在Linux命令中主要是方便两条命令互相之间可以相互通信. 管道符 管道符(匿名管道)是Shell编程经常用到的通信工具. 管道符是"| ...

  5. 小鸟初学Shell编程(一)认识Shell

    开篇介绍 Linux里非常的有用的一个功能,这个功能就叫Shell脚本. Shell脚本在我日常开发工作里也占了非常重要的角色,项目中一些简单的工作我们都可以使用Shell脚本来完成,比如定时删除日志 ...

  6. 小鸟初学Shell编程(五)输入输出重定向

    重定向作用 一个进程默认会打开标准输入.标准输出.错误输出三个文件描述符. 重定向可以让我们的程序的标准输出.错误输出的信息重定向文件里,那么这里还可以将文件的内容代替键盘作为一种标准输入的方式. 重 ...

  7. 小鸟初学Shell编程(六)变量赋值

    变量的意义 我们在使用Linux命令或脚本的时候,会有一些输出,那么这些输出的信息可以用变量临时存储,以备我们下一条命令或脚本使用. 变量的定义 变量的定义建议用一个有意义的英文单词来代表变量,不要使 ...

  8. 小鸟初学Shell编程(九)环境变量变量配置文件

    介绍 在上一篇使用完了环境变量,并且知道PATH环境变量概念,那么我们对命令的执行就有了一定深入的理解.那么PATH环境变量或其他环境变量是保存在哪呢?那么这篇文章主要介绍环境变量配置文件. 配置文件 ...

  9. Shell编程-01-Shell脚本初步入门

    目录 什么是Shell 什么是Shell脚本 Shell脚本语言的种类 常用操作系统默认Shell Shell 脚本的建立和执行 脚本规范 什么是Shell     简单来说Shell其实就是一个命令 ...

随机推荐

  1. 「SAP技术」SAP MM 事务代码ME17的用法

    SAP MM 事务代码ME17的用法 1,如下采购信息记录需要被归档: PIR号码,5300007816   2, ME12打上删除标记,   3, 事务代码ME17做归档 3.1 创建archive ...

  2. [转]Eclipse插件开发之基础篇(3) 插件的测试与调试

    原文地址:http://www.cnblogs.com/liuzhuo/archive/2010/08/17/eclipse_plugin_1_1_2.html 1. 使用JUnit对插件进行测试 E ...

  3. [b0039] python 归纳 (二四)_多进程数据共享和同步_锁Lock&RLock

    # -*- coding: utf-8 -*- """ 多进程 锁使用 逻辑: 10个进程各种睡眠2秒,然后打印. 不加锁同时打印出来,总共2秒,加锁一个接一个打印,总共 ...

  4. [视频教程] 基于redis的消息队列实现与思考

    使用redis的list列表来实现消息队列功能,相信大家都听过消息队列,但是在业务中可能并没有真正去使用它.在公司项目中正好有个场景使用到了消息队列,因此就来说一下流程.在web界面上有个功能是群发邮 ...

  5. easyui权限

    实现权限目的: 是为了让不同的用户可以操作系统中不同资源 直接点说就是不同的用户可以看到不同的菜单 我们先来看下3张接下来用到的数据表 1.菜单表(t_easyui_menu) 2.用户菜单中间表(t ...

  6. 开始认识java

    1.java发展历史                              1991年   詹姆斯·高斯林 (James Gosling)  SUN公司Green项目(消费类电子产品) Oak  ...

  7. golang中的接口

    CSDN找的一个网页,照着抄练一次. 差不多的使用场景都在了. package main import ( "fmt" ) type People interface { Retu ...

  8. ACM-ICPC 2018 南京网络赛

    题目顺序:A C E G I J L A. An Olympian Math Problem 打表,找规律,发现答案为n-1 C. GDY 题意: m张卡片,标号1-13: n个玩家,标号1-n:每个 ...

  9. Bliss OS 12.1下载 PC上Android10体验

    下载也不是一帆风顺啊 这是设计者的secret: https://forum.xda-developers.com/android/software/bliss-os-x86-pc-s-12-x-de ...

  10. [随笔]ICPC2.0

    停更半年了.瞎扯下过去,现在与未来. 一.过去 1.插叙 讲道理我应该早就写这段在博客上了,不知怎么一直忘了. 在6月拿到ICPC南昌邀请赛的Ag还是比较满意,满意的最大原因是我弱校从没拿过Ag(? ...