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

  整理自网络多个来源。

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

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)、source 命令可以强行让一个脚本去立即影响当前的环境。

(2)、source 命令会强制执行脚本中的全部命令,而忽略文件的权限。

(3)、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 ***

时间: 2024-10-29 02:42:16

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

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

复制文章:https://www.jb51.net/article/128918.htm 这篇文章主要介绍了shell中source.sh.bash../执行脚本的区别,需要的朋友可以参考下 1.source命令用法: source FileName 作用:在当前bash环境下读取并执行FileName中的命令.该filename文件可以无"执行权限" 注:该命令通常用命令“.”来替代. 如:source .bash_profile . .bash_profile两者等效. sourc

[转]shell中 source命令即点空格后面再跟可执行文件的说明

这里记录的是在一个shell脚本里面使用. ./file.sh 和./file.sh 的区别,本文参考了http://www.lslnet.com/linux/dosc1/39/linux-283534.htm (这个蓝森林的东西应该是来源于chinaunix) 来个小实验场景一:vi file1.sh./file2.shecho $NIVEK vi file2.shNIVEK=goupiexport NIVEK chmod 755 file1.sh file2.sh $./file1.sh  

Linux SHELL之source与.的区别

一.使用'.'执行 1. 文件内容: a.sh #!/bin/sh a=2 echo a=$a b.sh #!/bin/sh ./a.sh echo a.sh: a=$a 2. 添加可执行权限 # chmod +x a.sh b.sh 3. 运行 # ./b.sh  a=2 a.sh: a= 可以看出b.sh中的a并没有获取a.sh中的a变量,只是将a.sh给执行了一遍 二.使用source执行 1. 文件内容: a.sh #!/bin/sh a=2 echo a=$a b.sh #!/bin/

Shell中source/fork/exec的区别

fork是linux的系统调用,用来创建子进程,子进程是父进程的一个副本,从父进程那里获得一定的资源分配以及继承父进程的环境.子进程与父进程唯一不同的地方在于pid(process id).环境变量(传给子进程的变量,遗传性是本地变量和环境变量的根本区别)只能单向从父进程传给子进程.不管子进程的环境变量如何变化,都不会影响父进程的环境变量.默认shell中的命令都是此种方式,创建sub-shell,然后执行.执行完后,返回父shell. exec和source都属于bash内置命令,执行sour

ubuntu系统shell 中source: not found错误

错误: shell脚本中含有source命令运行时提示 source: not found 测试: 运行 ls -l /bin/sh 后显示/bin/sh -> dash 这说明是用dash来进行解析的. 解决方案: 命令行执行:dpkg-reconfigure dash(需要root权限) 在界面中选择no 再运行ls -l /bin/sh 后显示/bin/sh -> bash 原文地址:https://www.cnblogs.com/laien/p/8277617.html

[shell] shell 变量生命周期, source, export

1. shell 的派生 用户登录到Linux系统后,系统将启动一个用户shell.在这个shell中,可以使用shell命令, 或声明变量,也可以创建并运行shell脚本程序.运行shell脚本程序时,系统将创建一个子shell. 此时,系统中将有两个shell,一个是登录时系统启动的shell,另一个是系统为运行脚本程序创建的shell.当一个脚本程序运行完毕,脚本shell将终止,返回到执行该脚本之前的shell. 从这种意义上来说,用户可以有许多 shell,每个shell都是由某个sh

在shell脚本中调用另一个脚本的三种不同方法(fork, exec, source)——转载

原文链接:http://blog.chinaunix.net/uid-22548820-id-3181798.html fork ( /directory/script.sh) :如果shell中包含执行命令,那么子命令并不影响父级的命令.在子命令执行完后再执行父级命令,子级的环境变量不会影响到父级. fork是最普通的, 就是直接在脚本里面用/directory/script.sh来调用script.sh这个脚本.运行的时候开一个sub-shell执行调用的脚本,sub-shell执行的时候,

[Z] shell中的点命令与source命令

1 shell脚本执行方法 有两种方法执行shell scripts,一种是新产生一个shell,然后执行相应的shell scripts:一种是在当前shell下执行,不再启用其他shell. 新产生一个shell然后再执行scripts的方法是在scripts文件开头加入语句:#!/bin/sh.一般的script文件(.sh)即是这种用法.这种方法先启用新的sub-shell(新的子进程),然后在其下执行命令. 另外一种方法就是上面说过的source命令,不再产生新的shell,而在当前s

linux shell 结构 与source 命令

Linux Shell&环境变量 登录到系统后,系统将启动一个用户shell.在这个shell中,可以使用shell命令或声明变量,也可以创建并运行shell脚本程序.运行 shell脚本程序时,系统将创建一个子shell.此时,系统中将有两个shell,一个是登录时系统启动的shell,另一个是系统为运行脚本程序创 建的shell.当一个脚本程序运行完毕,它的脚本shell将终止,可以返回到执行该脚本之前的shell.从这种意义上来说,用户可以有许多 shell,每个shell都是由某个she