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

一,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. Chrome浏览器查看SSL证书信息

    1.https使用f12打开,选中security 如果F12打不开,可以通过最右端的自定义及控制chrome菜单,打开"更多工具"-->"开发者工具" ...

  2. SqlServer存储过程加密与解密

    ★ 加密存储过程 ★: IF EXISTS (SELECT name FROM sysobjects WHERE name = 'encrypt_this' AND type = 'P')   DRO ...

  3. js小知识 双叹号(!!)

    !!:一般用来将后面的表达式强制转换为布尔值(boolean):true或者false; avascript约定规则为:  false.undefinded.null.0.”” 为 false  tr ...

  4. 让placeholder中的默认文字居中,或者缩进多少像素

    直接给input或者textarea的样式加texta-align:center; <input type="" name="" id="&qu ...

  5. 新疆大学OJ(ACM) 1047: string 字符串排序

    1047: string 时间限制: 1 Sec  内存限制: 128 MB 题目描述 有n个字符串字符串n<=50000,把所有字符串串起来,得到一个字典序最小的字符串. 输入 输入第一行是一 ...

  6. MySQL学习(六)——自定义连接池

    1.连接池概念 用池来管理Connection,这样可以重复使用Connection.有了池,我们就不用自己来创建Connection,而是通过池来获取Connection对象.当使用完Connect ...

  7. 【原创】ActiveMQ集群JDBC持久化

    在activemq.xml中配置持久化方式: <bean id="oracle-ds" class="org.apache.commons.dbcp.BasicDa ...

  8. Linux rm删除大批量文件遇到 Argument list too long

    在使用rm删除大批量文件时,有可能会遭遇“参数列太长”(Argument list too long)的问题.如下所示   [oracle@DB-Server bdump]$ rm -v epps_q ...

  9. Springboot设置跨域的三种方式

    方式一(精细配置) 在需要跨域的整个Controller或者单个方法上添加@CrossOrigin注解 方式二(全局配置) @Configuration public class WebMvcConf ...

  10. 一、数组---数组中的K-diff数对※※※※※

    给定一个整数数组和一个整数 k, 你需要在数组里找到不同的 k-diff 数对.这里将 k-diff 数对定义为一个整数对 (i, j), 其中 i 和 j 都是数组中的数字,且两数之差的绝对值是 k ...