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

简介:

 整理自网络多个来源。

1、source与点命令,功能相同,来源不同。

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

2、shell脚本执行方法

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

  新产生一个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)。

3、关于source命令。

1
2
3
source 命令可以强行让一个脚本去立即影响当前的环境。
source 命令会强制执行脚本中的全部命令,而忽略文件的权限。
source 命令通常用于重新执行刚修改的初始化文件,如 .bash_profile 和 .profile 等等。

4、关于export命令。

  export和source其实是两个完全不同的命令。export一般解释是“设置或显示环境变量”。这在功能上说没错,但是为什么要用“导出”这个单词呢?

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

5、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 ***

本文转自walker snapshot博客51CTO博客,原文链接http://blog.51cto.com/walkerqt/1690202如需转载请自行联系原作者


RQSLT

相关文章
|
4月前
|
Shell Linux
Linux环境变量之shell中export定义全局变量和echo 变量的区别
Linux环境变量之shell中export定义全局变量和echo 变量的区别
|
6月前
|
存储 Shell Linux
【Shell 命令集合 系统设置 】⭐⭐⭐Linux 置环境变量 export命令 使用指南
【Shell 命令集合 系统设置 】⭐⭐⭐Linux 置环境变量 export命令 使用指南
107 0
|
Shell
Shell export 定义全局变量(变量的作用范围)
Shell export 定义全局变量(变量的作用范围)
266 0
shell 脚本中包含环境变量的设置命令需要用 source 命令执行才会生效
shell 脚本中包含环境变量的设置命令需要用 source 命令执行才会生效
|
Java Shell Linux
解决shell脚本中"source /etc/profile"重载配置文件不生效的问题
1、shell脚本中“source /etc/profile”无法生效的原因及解决办法;2、shell中"."、"source"、"sh"、"./"的区别;
解决shell脚本中"source /etc/profile"重载配置文件不生效的问题
|
Shell Linux Python
实例分析:Linux 系统 CentOS8 shell 中 set, env, export 区别与使用场景
set , env 和 export 之间的异同,以及使用场景
679 0
|
Shell Linux
Bash shell中bash、sh、source及“.”点的区别与联系
在众多Linux发行版中bash shell 可谓是随处可见。作为众多发行版的首选shell,对于bash shell的学习对我们来说,显得格外重要。
2364 0