`
诗意的栖居
  • 浏览: 274444 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

source命令

阅读更多
source [filename]  不再产生新的shell,而在当前shell下执行一切命令。

Read  and execute commands from filename in the current shell environment and return the exit status of the last
              command executed from filename.  If filename does not contain a slash, file names in PATH are used to  find  the
              directory containing filename.  The file searched for in PATH need not be executable.  When bash is not in posix
              mode, the current directory is searched if no file is found in PATH.  If the  sourcepath  option  to  the  shopt
              builtin  command  is turned off, the PATH is not searched.  If any arguments are supplied, they become the posi-
              tional parameters when filename is executed.  Otherwise the positional parameters  are  unchanged.   The  return
              status  is the status of the last command exited within the script (0 if no commands are executed), and false if
              filename is not found or cannot be read.

比如您在一个脚本里export $KKK=111 ,假如您用./a.sh执行该脚本,执行完毕后,您运行 echo $KKK
,发现没有值,假如您用source来执行 ,然后再echo
,就会发现KKK=111。因为调用./a.sh来执行shell是在一个子shell里运行的,所以执行后,结构并没有反应到父shell里,但是
source不同他就是在本shell中执行的,所以能够看到结果


举例:
lu1() {
    echo 'aaaaaaaaa'
}

lu2() {
    echo 'bbbbbbbbb'
}
上面就是,run.sh的源码了,可以看到只有2个函数定义没有任何地方来调用这两个函数,那么我们如果这样执行:
luther@gliethttp:~$ ./run.sh
luther@gliethttp:~$
可以看到什么都没有,因为没有地方调用这2个函数,我们希望在我们的luther@gliethttp:~$ 提示符后面调用这2个函数,来试试,
luther@gliethttp:~$ lu1
bash: lu1: command not found
luther@gliethttp:~$ lu2
bash: lu2: command not found
luther@gliethttp:~$
结果都提示找不到命令,是不是我们的这个需求shell还不提供支持呢,当然不是,这样有用的需求shell早就为我们做好解决方案了,来看看怎么实现,
shell中有2个命令可以完成我们的工作,一个是source另一个就是和source等效的.逗号运算符:
luther@gliethttp:~$ . run.sh或者luther@gliethttp:~$source run.sh
这样我们run.sh脚本中创建的变量和函数就添加到了执行.或source的shell,直到关闭该shell窗口,否则run.sh中创建的变量和函数将一直有效,
如果我们只是执行./run.sh启动一个subshell来运行我们的run.sh脚本,那么run.sh脚本中的变量和函数将紧紧影响到由shell启动的subshell,当./run.sh脚本退出之后,run.sh变量和函数的影响寿命也到了尽头。
来看看现在的现象:
luther@gliethttp:~$ ./run.sh
luther@gliethttp:~$ lu1
bash: lu1: command not found
luther@gliethttp:~$ lu2
bash: lu2: command not found
luther@gliethttp:~$ . run.sh
luther@gliethttp:~$ lu1
aaaaaaaaa
luther@gliethttp:~$ lu2
bbbbbbbbb
luther@gliethttp:~$
重新启动一个新shell:
luther@gliethttp:~$ ./run.sh
luther@gliethttp:~$ lu1
bash: lu1: command not found
luther@gliethttp:~$ lu2
bash: lu2: command not found
luther@gliethttp:~$ source run.sh
luther@gliethttp:~$ lu1
aaaaaaaaa
luther@gliethttp:~$ lu2
bbbbbbbbb
luther@gliethttp:~$

1、执行脚本时是在一个子shell环境运行的,脚本执行完后该子shell自动退出。2、一个shell中的系统环境变量才会被复制到 子shell中(用export定义的变量);3、一个shell中的系统环境变量只对该shell或者它的子shell有效,该shell结束时变量消 失(并不能返回到父shell中)。3、不用export定义的变量只对该shell有效,对子shell也是无效的。
不管怎么设置,不会多层继承,对子子shell是没任何用的。
分享到:
评论

相关推荐

    Mysql命令行下用source命令导入sql文件

    至于提供的`Mysql命令行下用source命令导入sql文件.jpg`,这可能是一个截图,展示了执行`source`命令前后的数据库状态,帮助用户理解导入过程和结果。由于这是一个图片,我们无法直接查看其内容,但通常它会显示...

    linux的source命令找不到解决方法.docx

    Linux 的 source 命令是一种常用的命令,用于读取并执行指定文件中的命令,但是有时候在使用 source 命令时,可能会出现找不到命令的情况。今天我们将为大家介绍 Linux 的 source 命令找不到的解决方法。 问题描述 ...

    source命令 在当前Shell环境中从指定文件读取和执行命令

    source命令(从 C Shell 而来)是bash shell的内置命令。点命令,就是个点符号,(从Bourne Shell而来)是source的另一名称。 source命令通常用于重新执行刚修改的初始化文件,使之立即生效,而不必注销并重新登录。...

    source命令与“.”点命令.doc

    ### Source命令与“.”点命令详解 #### 一、引言 在Linux系统及类Unix环境中,`source`命令和“.”(点)命令是非常重要的工具,它们主要用于在当前shell环境中执行另一个脚本文件,这对于配置环境变量、加载自定义...

    命令ping的源代码.rar_windowssource命令_网络 测_网络连接

    标题中的“命令ping的源代码.rar_windowssource命令_网络测_网络连接”指的是这个压缩包文件包含了Windows操作系统中ping命令的源代码,这对于我们理解ping命令的工作原理以及如何实现网络连接测试至关重要。...

    linux的source命令找不到解决方法.pdf

    Linux 的 source 命令找不到解决方法 Linux 系统中,source 命令是一个非常常用的命令,用于读取和执行指定文件中的命令。然而,有时候我们可能会遇到 source 命令找不到的情况,今天我们就来讨论这个问题。 问题...

    linux下source命令使用详解

    ### Linux下的source命令详解 #### 一、概述 在Linux环境下,`source`命令是一个非常实用的工具,尤其是在处理shell脚本和环境配置文件时。本文将深入探讨`source`命令的功能、用法以及与其他执行脚本方式的区别,...

    MySQL 数据库 source 命令详解及实例

    MySQL 数据库的 `source` 命令是一个非常实用的工具,主要用于批量执行 SQL 脚本文件,常用于数据导入、数据库初始化或者更新数据库结构等场景。在本篇文章中,我们将深入探讨 `source` 命令的使用方法、注意事项...

    Mysql导入导出工具Mysqldump和Source命令用法详解

    通过Mysql Source命令能够将SQL文件导入Mysql数据库中,下面通过Mysql导入导出SQL实例详解Mysqldump和Source命令的用法。 Mysql命令行导出工具Mysqldump命令详解 Mysql命令行导出工具Mysqldump.e

    shell中的source命令的巧妙用法

    1. **source命令的基本用途** - 当你需要更新Shell环境,如修改了`.bashrc`、`.bash_profile`或`/etc/profile`等初始化文件后,`source`命令可以让你无须注销并重新登录即可应用更改。例如,`source ~/.bashrc`会...

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

    1. **source命令**: `source FileName` 或 `. FileName`(点号也可用作source的同义词)的作用是在当前的bash环境中读取并执行文件`FileName`中的命令。这意味着,所有在`FileName`中定义的变量、函数和命令都会...

    Linux操作系统的常用命令

    * source 命令:用于使环境变量生效。 Java 版本 * java -version 命令:用于查看当前 Java 版本。 防火墙配置 * /etc/sysconfig/iptables 文件:用于配置 Linux 系统的防火墙。 * iptables 服务:用于启动和...

    linux系统不支持常用命令的解决方法

    例如,在上面的解决方法中,我们使用 `export` 命令来设置环境变量,然后使用 `source` 命令来使环境变量生效: `source /etc/profile.d/java.sh` 这样可以使得环境变量生效,系统可以正确地找到命令。 结论 ...

    3DS Max 7.0 PF Source粒子全攻略

    因此,本篇将详细介绍PF Source命令面板中的各项参数及其用法。 --- ### 1. 创建PF Source(粒子流来源) - **步骤一**:在命令面板上点击Geometry按钮,在下拉列表中选择Particle Systems项。 - **步骤二**:...

    mysql source 命令导入大的sql文件的方法

    MySQL的`source`命令是数据库管理员经常使用的工具,用于快速导入大体积的SQL脚本文件,这在数据恢复、数据库初始化或数据迁移等场景中非常有用。本文将深入讲解如何利用`source`命令高效地导入大型SQL文件。 首先...

Global site tag (gtag.js) - Google Analytics