• Linux 执行脚本时 source 和 . 和 sh 和 ./ 的区别


    一般Linux上执行一个shell脚本,有如下几种方法:

    source test.sh
    . test.sh
    bash test.sh
    ./test.sh

    source 和 .

    source和 . 这两个都是shell自带的内建命令,这两个命令是等价的关系。也就是说这两条命令的执行是完全一样的。使用 type source 和 type . 可以看出它们都是内建命令;使用 help source 和 help . 也可以看出这两个命令的作用一模一样。因此,这两个命令是等价的,用哪个都行。

    作用:在当前 shell 中执行一个文件中的命令。即不会启动一个新的子 shell 进程。所有在脚本中设置的变量将成为当前Shell的一部分。

    sh filename 或 bash filename

    sh filename 另起一个子 shell 进程,在子 shell 中执行脚本里面的语句,该子 shell 继承父 shell 的环境变量(但不会继承普通变量,也就是没有被 export 的变量)。

    测试 source 和 . 和 sh 

    test.sh :

    #!/bin/bash
    
    echo "Print Bash Path:$SHELL"
    echo $EXPORT_VAR
    echo $LOCAL_VAR

    执行如下:

    可以看出,. 和 source 执行结果都是一样的,并且可以打印出当前 shell 中的变量 LOCAL_VAR,而使用 bash test.sh 则不能打印出 LOCAL_VAR,因为 bash test.sh 是另起了一个子 shell 执行的脚本,所以父 shell 中的普通变量不能继承,但是 export 的全局的环境变量是可以继承的。

    ./filename

    ./ 是用来执行一切可执行文件的方法,不仅仅可以用来执行shell脚本。需要特别注意的是 ./ 并不等于 . 符号,两者是具有本质区别的。使用 ./ 执行的文件必须是可执行文件,文件必须有 x 权限。
    ./  这个符号后面需要跟一个可执行文件的路径,用于定位执行文件的位置,这个路径可以是相对路径。那么如何区分不同的可执行文件呢?对于shell脚本来说,我们会在开头加上:#!/bin/bash

     

     使用 ./ 测试 test.sh,先给 test.sh 可执行的权限,从结果中可以发现,没有打印出普通变量 LOCAL_VAR,说明 ./ 也会另起一个 shell 进行可执行文件的执行。

    参考文章

    Linux shell执行source和 . 的区别_程序猿Ricky的日常干货-CSDN博客_linux shell source

    Linux下source命令详解_在努力!-CSDN博客_linux source

  • 相关阅读:
    LoadRunner利用ODBC编写MySql脚本(转)
    未在本地计算机上注册 microsoft.jet.oledb.4.0 提供程序
    趣文:舌尖上的程序猿
    Hadoop之我见
    C语言的经典排序算法源码
    Oracle自学笔记(一)
    log4j.properties 详解与配置步骤总结
    修改oracle用户密码永不过期
    Android 发送短信总结
    CEF禁止右键菜单
  • 原文地址:https://www.cnblogs.com/FengZeng666/p/15323028.html
Copyright © 2020-2023  润新知