关于Shell的source、点(.)和export

  整理自网络多个来源。shell

一、source与点命令,功能相同,来源不一样。bash

source 命令是 bash shell 的内置命令,从 C Shell 而来。
source 命令的另外一种写法是点符号,用法和 source 相同,从Bourne Shell而来。

二、shell脚本执行方法网络

  有两种方法执行shell scripts,一种是新产生一个shell,而后执行相应的shell scripts;一种是在当前shell下执行,再也不启用其余shell。ide

  新产生一个shell而后再执行scripts的方法是在scripts文件开头加入语句:#!/bin/sh。通常的script文件(.sh)便是这种用法。这种方法先启用新的sub-shell(新的子进程),而后在其下执行命令。继承

  另一种方法就是上面说过的source命令,再也不产生新的shell,而在当前shell下执行一切命令。在 bash下输入man source,找到source命令解释处,能够看到解释"Read and execute commands from filename in the current shell environment and ..."。从中能够知道,source命令是在当前进程中执行参数文件中的各个命令,而不是另起子进程(或sub-shell)。进程

三、关于source命令。ip

source 命令能够强行让一个脚本去当即影响当前的环境。
source 命令会强制执行脚本中的所有命令,而忽略文件的权限。
source 命令一般用于从新执行刚修改的初始化文件,如 .bash_profile 和 .profile 等等。

四、关于export命令。it

  export和source实际上是两个彻底不一样的命令。export通常解释是“设置或显示环境变量”。这在功能上说没错,可是为何要用“导出”这个单词呢?class

  这是由于在子 shell(参见第2点)中定义的变量只在该子shell内有效。若是在一个shell脚本程序中定义了一个变量,当该脚本程序运行时,这个定义的变量只是该脚本程序内的一个局部变量,其余的shell不能引用它,要使某个变量的值能够在其余shell中被改变,可使用export命令对已定义的变量进行输出。 export命令将使系统在建立每个新的shell时定义这个变量的一个拷贝。这个过程称之为变量输出。变量

五、source filename 与 sh filename 及./filename执行脚本的区别。

(1)、当shell脚本具备可执行权限时,用sh filename与./filename执行脚本是没有区别的。 ./filename是由于当前目录没有在PATH中,全部"."是用来表示当前目录的。

(2)、sh filename 从新创建一个子shell,在子shell中执行脚本里面的语句,该子shell继承父shell的环境变量,但子shell新建的、改变的变量不会被带回父shell,除非使用export。

(3)、source filename:这个命令其实只是简单地读取脚本里面的语句依次在当前shell里面执行,没有创建新的子shell。那么脚本里面全部新建、改变变量的语句都会保存在当前shell里面。


*** walker ***

相关文章
相关标签/搜索