shell中的source命令的巧妙用法

首先,通常用于重新执行刚修改的初始化文件,使之立即生效,而不必注销并重新登录。例如,当我们修改了/etc/profile文件,并想让它立刻生效,而不用重新登录,就可以使用source命令,如source /etc/profile。

其次,source filepath或者. filepath,sh filepath或者./filepath区别:

1. sh filepath会重新建立一个子shell,在子shell中执行脚本里面的语句,该子shell继承父shell的环境变量,但子shell是新建的,其改变的变量不会被带回父shell,除非使用export。

2. source filename其实只是简单地读取脚本里面的语句依次在当前shell里面执行,没有建立新的子shell。那么脚本里面所有新建、改变变量的语句都会保存在当前shell里面。

因为不会建立新的子shell,变量的值都可以直接取到,我们看一个例子:

我们可以把下面的这些配置当成shell脚本中的赋值语句,然后使用source获取变量的值,因为这个配置不符合任何ini之类格式,所以不好用程序获取:

这里用到了&&,它的作用是左边的命令执行成功,才执行右边的命令;||就相反,左边的命令执行失败,才执行右边的命令。

2>/dev/nul下面看下内容详情

标准输入0    从键盘获得输入 /proc/self/fd/0

标准输出1    输出到屏幕(即控制台) /proc/self/fd/1

错误输出2    输出到屏幕(即控制台) /proc/self/fd/2

/dev/null代表linux的空设备文件,所有往这个文件里面写入的内容都会丢失,俗称“黑洞”

1. 2>/dev/null意思就是把错误输出到“黑洞”

2. >/dev/null 2>&1默认情况是1,也就是等同于1>/dev/null 2>&1。意思就是把标准输出重定向到“黑洞”,还把错误输出2重定向到标准输出1,也就是标准输出和错误输出都进了“黑洞”

3. 2>&1 >/dev/null意思就是把错误输出2重定向到标准出书1,也就是屏幕,标准输出进了“黑洞”,也就是标准输出进了黑洞,错误输出打印到屏幕

关于这里”&”的作用,我们可以这么理解2>/dev/null重定向到文件,那么2>&1,这里如果去掉了&就是把错误输出给了文件1了,用了&是表明1是标准输出。

总结

以上所述是小编给大家介绍的shell中的source命令的巧妙用法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

时间: 2017-11-21

详解shell中source、sh、bash、./执行脚本的区别

1.source命令用法: source FileName 作用:在当前bash环境下读取并执行FileName中的命令.该filename文件可以无"执行权限" 注:该命令通常用命令"."来替代. 如:source .bash_profile . .bash_profile两者等效. source(或点)命令通常用于重新执行刚修改的初始化文档. source命令(从 C Shell 而来)是bash shell的内置命令. 点命令,就是个点符号,(从Bourne

详解shell中脚本参数传递的两种方式

方式一:$0,$1,$2.. 采用$0,$1,$2..等方式获取脚本命令行传入的参数,值得注意的是,$0获取到的是脚本路径以及脚本名,后面按顺序获取参数,当参数超过10个时(包括10个),需要使用${10},${11}....才能获取到参数,但是一般很少会超过10个参数的情况. 1.1 示例:新建一个test.sh的文件 #!/bin/bash echo "脚本$0" echo "第一个参数$1" echo "第二个参数$2" 在shell中执行

详解Java中Checked Exception与Runtime Exception 的区别

详解Java中Checked Exception与Runtime Exception 的区别 Java里有个很重要的特色是Exception ,也就是说允许程序产生例外状况.而在学Java 的时候,我们也只知道Exception 的写法,却未必真能了解不同种类的Exception 的区别. 首先,您应该知道的是Java 提供了两种Exception 的模式,一种是执行的时候所产生的Exception (Runtime Exception),另外一种则是受控制的Exception (Checked

详解 Shell中的grep命令

用'grep'搜索文本文件 如果您要在几个文本文件中查找一字符串,可以使用'grep'命令.'grep'在文本中搜索指定的字符串.举个例子:假设您正在'/usr/src/linux/Documentation'目录下搜索带字符串'magic'的文件: $ grep magic /usr/src/linux/Documentation/* sysrq.txt:* How do I enable the magic SysRQ key? sysrq.txt:* How do I use the ma

详解js中let与var声明变量的区别

ES6 新增了let命令,用来声明局部变量,所声明的变量,只在let命令所在的代码块内有效,而且有暂时性死区的约束. 1.ES6可以用let定义块级作用域变量 代码如下: function f1(){ { var a = 10; let b = 20; } console.log(a); // 10 console.log(b); // Uncaught ReferenceError: b is not defined } f1(); 说明:在ES6之前只有全局作用域和函数作用域,在ES6中新增

详解Java中的checked异常和unchecked异常区别

(一)Java的异常层次结构 要想明白Java中checked Exception和unchecked Exception的区别,我们首先来看一下Java的异常层次结构. 这是一个简化的Java异常层次结构示意图,需要注意的是所有的类都是从Throwable继承而来,下一层则分为两个结构,Error和Exception.其中Error类层次描述了Java运行时系统的内部错误和资源耗尽错误,这种错误除了简单的报告给用户,并尽力阻止程序安全终止之外,一般也米有别的解决办法了. (二)unchecke

详解shell中>/dev/null 2>&1到底是什么

前言 相信大家经常能在shell脚本中发现>/dev/null 2>&1这样的语句.以前的我并没有去深入地理解这段命令的作用,照搬照用,直到上周我将这段命令不小心写成了2>&1 >/dev/null,出了一点小问题之后,我才开始去了解这段命令背后的"玄机". shell重定向介绍 就像我们平时写的程序一样,一段程序会处理外部的输入,然后将运算结果输出到指定的位置.在交互式的程序中,输入来自用户的键盘和鼠标,结果输出到用户的屏幕,甚至播放设备中.而

实例详解JavaScript中setTimeout函数的执行顺序

前言 setTimeout,前端工程师必定会打交道的一个函数.它看上去非常的简单,朴实,有着一个很不平凡的名字--定时器.其实网上关于JavaScript中setTimeout的文章很多,但总感觉例子不够直接具体,因此写了个简单的例子并加以解释希望能让大家明白setTimeout是如何执行的.下面话不多说了,来一起看看详细的介绍: 实例代码如下: var time1=new Date().getTime(); console.log(1,time1); setTimeout(function()

详解Node中导入模块require和import的区别

ES6标准发布后,module成为标准,标准的使用是以export指令导出接口,以import引入模块,但是在我们一贯的node模块中,我们采用的是CommonJS规范,使用require引入模块,使用module.exports导出接口. 不把require和import整清楚,会在未来的标准编程中死的很难看. require时代的模块 node编程中最重要的思想之一就是模块,而正是这个思想,让JavaScript的大规模工程成为可能.模块化编程在js界流行,也是基于此,随后在浏览器端,req

详解webpack中的hash、chunkhash、contenthash区别

hash.chunkhash.contenthash hash一般是结合CDN缓存来使用,通过webpack构建之后,生成对应文件名自动带上对应的MD5值.如果文件内容改变的话,那么对应文件哈希值也会改变,对应的HTML引用的URL地址也会改变,触发CDN服务器从源服务器上拉取对应数据,进而更新本地缓存.但是在实际使用的时候,这几种hash计算还是有一定区别. 我们先建一个测试案例来模拟下: 项目结构 我们的项目结构很简单,入口文件index.js,引用了index.css.然后新建了jquer