说明:以下是个人的见解,不一定都正确,如有错误,欢迎指正!

一,shell脚本的运行方式,最常见的有以下几种:

1 )  . xxx.sh,注意,前面是一个点'.'

2 ) source xxx.sh,这种方式和第一种的方式效果是一样的

3)./xxx.sh

4)  sh xxx.sh

5)  bash xxx.sh

二,shell运行方式结果的差异

1) . xxx.sh是在当前的bash环境下执行xxx.sh脚本文件,xxx.sh文件的所有者可以无可执行权限,原有的环境变量的值会被脚本修改。

2)source  xxx.sh,这种方式和方式1的执行效果是一样的,同样也不要求文件的所有者必须要有可执行权限,通常用于生效刚修改过的脚本文件,例如我们在修改环境变量配置脚本文件之后就通过执行source xxx使其立即生效,同样这种执行方式会修改原有的环境变量的值。

第一和第二种方式会修改原有的环境变量的值。

3)./xxx.sh方式运行脚本文件,会打开一个子shell来执行脚本文件,运行一个shell脚本时会启动另一个命令解析器。每个shell脚本运行在parent shell的一个子进程里,这个parent shell是指一个在控制终端或者在一个xterm窗口中给你指示符的进程,shell脚本也可以启动它自己的子进程。

这种运行方式要求被运行的脚本文件要有可执行的权限,否则脚本运行失败。

这种运行方式不会改变原有的环境变量的值。

4)sh xx.sh的方式执行脚本文件,这种方式会打开新的子shell读取并执行脚本,并且不要求被执行的文件必须有可执行的权限。

原有的环境变量的值没被改变

5)bash xxx.sh的方式运行脚本文件,这种运行方式也没有要求被执行文件必须有可执行的权限,和sh xxx.sh方式一样会打开新的子shell读取并执行脚本,也不会改变原有的环境变量的值。

总结:

  我们在写脚本的时候,有时候需要改变原有的环境变量的值,有时候不能改变原有的环境变量的值,这时候我们就要注意选择运行脚本的方式了,因为不同的运行脚本的方式会产生不同的结果。

shell脚本不同运行方式的差异的更多相关文章

  1. Shell脚本编程具体解释

    第12章 Shell脚本编程   l  Shell命令行的执行 l  编写.改动权限和运行Shell程序的步骤 l  在Shell程序中使用參数和变量 l  表达式比較.循环结构语句和条件结构语句 l ...

  2. 014-交互式Shell和shell脚本获取进程 pid

    Linux 的交互式 Shell 与 Shell 脚本存在一定的差异,主要是由于后者存在一个独立的运行进程 1.交互式 Bash Shell 获取进程 pid 在已知进程名(name)的前提下,交互式 ...

  3. 使用 shell 脚本自动对比两个安装目录并生成差异补丁包

    问题的提出 公司各个业务线的安装包小则几十兆.大则几百兆,使用自建的升级系统向全国百万级用户下发新版本时,流量耗费相当惊人.有时新版本仅仅改了几个 dll ,总变更量不过几十 K 而已,也要发布一个完 ...

  4. 什么是Shell、Shell脚本

    Shell本身是一个用C语言编写的程序,它是用户使用Linux的桥梁.Shell既是一种命令语言,又是一种程序设计语言.作为命令语言,它交互式地解释和执行用户输入的命令:作为程序设计语言,它定义了各种 ...

  5. Shell脚本基础知识详细介绍(一)

    Shell本身是一个用C语言编写的程序,它是用户使用Linux的桥梁.Shell既是一种命令语言,又是一种程序设计语言.作为命令语言,它交互式地解释和执行用户输入的命令:作为程序设计语言,它定义了各种 ...

  6. shell重温---基础篇(shell变量&字符串以及git GUI运行shell脚本方式)

    既然是基础篇那肯定是需要对shell的各种需要注意的基本点进行说明了.接下来就是show time...    shell呢,是一个用C语言编写的应用程序,是用户使用linux的桥梁.所以呢,他既是一 ...

  7. 什么是Shell?Shell脚本基础知识详细介绍

    这篇文章主要介绍了什么是Shell?Shell脚本基础知识介绍,本文是一篇Shell脚本入门文章,在本文你可学到什么是Shell.有多少种Shell.一个Shell脚本代码实例,需要的朋友可以参考下 ...

  8. 第一个shell脚本

    打开文本编辑器,新建一个文件,扩展名为sh(sh代表shell),扩展名并不影响脚本执行,见名知意就好. #!/bin/bash echo "Hello World !" &quo ...

  9. Shell脚本编程30分钟入门

    Shell脚本编程30分钟入门 转载地址: Shell脚本编程30分钟入门 什么是Shell脚本 示例 看个例子吧: #!/bin/sh cd ~ mkdir shell_tut cd shell_t ...

随机推荐

  1. VC++ LPARAMA 转换成CString

    如果是SendMessage发送的CString CString s = "xxxxxx";SendMessage(hWnd,WM_XXXX,NULL,(LPARAM)&s ...

  2. Wireshark filter语法

    过滤器语法 ------------------------------------------------------------- 最简单的过滤允许你检查一个协议或者字段的存在.如果你想查看所有的 ...

  3. (转)js document.all的用法

    document.all用法 一. document.all是页面内所有元素的一个集合.例如:      document.all(0)表示页面内第一个元素 二.document.all可以判断浏览器 ...

  4. Android PullToRefreshListView设置各个item之间的间距

    要设置第三方的上拉下载listView的item之间的间距,可以在xml布局文件中的listView节点中设置xml的属性即可: android:divider="#00000000&quo ...

  5. 根据SPID查找SQL语句

      SELECT   /*+ ORDERED */          sql_text     FROM v$sqltext a    WHERE (a.hash_value, a.address) ...

  6. 条件变量本质-Problem statement-while not( P ) do skip

    条件变量相当于订阅-发布机制: 或者相当于同步的通知机制: 订阅和发布具有先后顺序:所以需要互斥量来维护顺序. 顺序不对,存在信号丢失问题. Problem statement[edit] For m ...

  7. express + multer 文件上传入门

    写在前面的 在web开发中,我们经常会遇到图片上传的功能,接下来我们就在express4.15.0框架中利用multer1.3.0模块来实现图片上传 开始敲代码 首先利用express-generat ...

  8. OSI概述问答

    1.    网络中体系结构的七层.四层.五层是怎么回事? OSI(Open System Interconnection)开放系统互连参考模型的七层协议体系结构:概念清楚,理论比较完整,但既复杂又不用 ...

  9. [APIO2012]派遣 可并堆(左偏树)

    没啥说的,自底向上合并大根堆即可. 一边合并,一边贪心弹堆顶直到堆的总和不大于预算. Code: #include <cstdio> #include <algorithm> ...

  10. MVC 单元测试xUnit初探

    对于.NET项目 Web Api的业务逻辑后台开发[特别是做Web Api接口]而言,编写单元测试用例,会极大的减轻代码帮助与运行的方式.然而使用测试框架,相对于自带的,我更加推荐是用xUnit.ne ...