执行命令的方式

执行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. plus.webview.create 使用方法

    plus.webview.create( "xxx.html", //打开页面地址 "xxx", //打开页面id值 { //窗口样式 width: '100% ...

  2. 设置view的layer属性方法

    1.需要导入QuartzCore.framewoork框架到工程2.在文件中导入#import 3.设置 必须导入的空间 #import<QuartzCore/QuartzCore.h> ...

  3. ucoreOS_lab6 实验报告

    所有的实验报告将会在 Github 同步更新,更多内容请移步至Github:https://github.com/AngelKitty/review_the_national_post-graduat ...

  4. HOW TO: Setting up Encrypted Communications Channels in Oracle Databas

    access_timeSeptember 22, 2015 person_outlineMartin Rakhmanov share In this article, I will explain h ...

  5. 7.JavaCC官方入门指南-例2

    例2:整数加法运算--改良版(增强语法分析器) 1.修改   上一个例子中,JavaCC为BNF生产式所生成的方法,比如Start(),这些方法默认只简单的检查输入是否匹配BNF生产式指定的规范.但是 ...

  6. springboot中http 的get post put delete请求

    组合注解(RequestMapping的变形) @GetMapping = @RequestMapping(method = RequestMethod.GET)@PostMapping = @Req ...

  7. 5.Java基础_Java算术/字符/字符串/赋值运算符

    /* 算术/字符/字符串/赋值 运算符 */ public class OperatorDemo01 { public static void main(String[] args){ //算术运算符 ...

  8. public class和class的区别

    class A { } class B { } public class 和class的区别: * 一个java源文件当中看看定义多个class *一个java源文件当中public的class不是必 ...

  9. javaScript___计算时间前一天和后一天案例

    1.  HTML 排版 <button onclick="anteayer()">前天</button> <button onclick=" ...

  10. 对比3种接口测试的工具:jmeter+ant;postman;python的requests+unittest或requests+excel

    这篇随笔主要是对比下笔者接触过的3种接口测试工具,从实际使用的角度来分析下3种工具各自的特点 分别为:jmeter.postman.python的requests+unittest或requests+ ...