首页 > 系统相关 >使用source执行shell脚本和直接执行的区别

使用source执行shell脚本和直接执行的区别

时间:2023-08-28 17:36:30浏览次数:44  
标签:脚本 shell source 当前 执行 环境变量

使用 source 命令和 ./ 形式来执行 shell 脚本有一些重要的区别:

  • 使用 ./ 形式执行 shell 脚本时,系统会创建一个新的子进程(不是子线程)来执行脚本。这个子进程会继承父进程(当前 shell)的环境,但脚本内所做的任何修改都只会在子进程中生效,不会影响到父进程(当前 shell)。

  • 使用 source 命令(或 .)执行脚本时,脚本内容会在当前进程(当前 shell)的上下文中执行,而不会创建新的子进程。这意味着脚本中的变量、函数等的更改会直接影响到当前 shell。

这种差异可能会影响脚本中的变量作用域、环境变量的更改以及对当前 shell 的影响。

  1. 作用域:

    • source. 使用 source 命令(或 .)来执行脚本时,脚本在当前 shell 环境中执行。这意味着,脚本中的任何变量、函数定义等在执行后仍然存在于当前 shell 中。
    • ./ 使用 ./ 来执行脚本时,系统会创建一个新的子 shell 来执行脚本。脚本中的变量、函数定义等只在子 shell 中有效,执行结束后不会影响父 shell 环境。
  2. 环境变量:

    • source. 执行脚本时,脚本可以修改当前 shell 环境的环境变量,这些变化将在脚本执行后继续存在。
    • ./ 子 shell 在执行脚本时会继承父 shell 的环境变量,但脚本中对环境变量的更改仅在子 shell 内有效,不会影响父 shell。
  3. 函数和别名:

    • source. 脚本中定义的函数和别名会在执行后继续在当前 shell 中存在,可以在之后的命令中继续使用。
    • ./ 子 shell 中定义的函数和别名只在子 shell 中有效,执行结束后不会影响父 shell。
  4. 退出状态:

    • source. 脚本执行的退出状态会影响当前 shell 环境。
    • ./ 子 shell 的退出状态不会影响父 shell。

综上所述,如果您希望脚本中的变量、函数等更改影响到当前 shell 环境,您可以使用 source 命令(或 .)来执行脚本。如果您只需要执行脚本而不需要在当前 shell 环境中保持任何更改,您可以使用 ./ 形式执行脚本。

标签:脚本,shell,source,当前,执行,环境变量
From: https://www.cnblogs.com/tangjicheng/p/17662907.html

相关文章

  • 禅道后台命令执行漏洞二
    漏洞简介禅道是第一款国产的开源项目管理软件。它集产品管理、项目管理、质量管理、文档管理、组织管理和事务管理于一体,是一款专业的研发项目管理软件,完整地覆盖了项目管理的核心流程。 禅道管理思想注重实效,功能完备丰富,操作简洁高效,界面美观大方,搜索功能强大,统计报表丰富多......
  • 实用指令_大数据shell_流程控制_if
    流程控制if判断if判断基本语法if[条件判断];then 程序fi##或者if[条件判断] then 程序elif[条件判断]then程序fi注意事项:1)[条件判断式]中括号和条件判断示之间必须有空格2)推荐使用第二种方式应用实例案例:请写出一个shell程序,如果输......
  • 在低代码平台执行 API 请求并将结果显示在页面上
    低代码开发平台(Low-CodeDevelopmentPlatform)是一种用于构建应用程序的软件开发环境,它允许开发者通过图形化的方式,而非传统的手动编码方式来创建应用程序。这种方式大大减少了开发应用程序所需的代码量,因此称为低代码。低代码平台的核心是其拖放式的用户界面,这允许开发者通过直......
  • ThinkPHP 2.x任意代码执行漏洞
    ThinkPHP2.x任意代码执行漏洞原因:ThinkPHP2.x版本中,使用preg_replace的/e模式匹配路由:$res=preg_replace('@(\w+)'.$depr.'([^'.$depr.'\/]+)@e','$var[\'\\1\']="\\2";',implode($depr,$paths));导致用户的输入参数被插入双引号......
  • 集合遍历使用多线程并行执行
    在业务中常常有这样的需求,需要遍历集合,分别处理,相互之前单独处理,互不影响。为了充分利用服务器资源,可以使用多线程来执行。parallelStream创建一个并行流,使用ConcurrentHashMap使多线程情况下线程安全CompletableFuture.allOf是所有线程全部执行完获得结果CompletableFuture.......
  • 实用指令_大数据shell_流程控制_for
    流程控制for基本语法1for变量in值1值2值3...do程序done应用实例案例1:打印命令输入的参数#!/bin/bashtmp=0forvarin$@do #tmp=$(($tmp+1))## #tmp=$[$tmp+1]##注意=两边不要空格 tmp=`expr$tmp+1` echo参数$tmp=$vardone基本语法2fo......
  • 实用指令_大数据shell_流程控制_while
    流程控制while基本语法while[条件判断式]do程序done应用实例案例1:从命令行输入一个数据n,统计从1+..n的值是多少#!/bin/bashecho你输入的值:$1 sum=0 i=0while[$i-le$1]do sum=$[$sum+$i]###注意=号不要空格8 i=`expr$i+1`###注......
  • 实用指令_大数据shell_运算符
    运算符学习如何在shell中进行各种运算操作。基本语法"$((运算式))"或"$[运算式]"exprm+n注意:expr运算符间要有空格exprm-nexpr\*,/,%乘,除,取余应用实例案例1:结算(2+3)*4的值###第一种方法$(((2+3)*4))###第二种方法$[(2+3)*4]##推荐第二种方......
  • 实用指令_大数据shell_流程控制_case
    流程控制case语句基本语法case$变量名in"值1")###如果变量的值1,则执行此程序1;;"值2")###如果变量的值2,则执行此程序2;;###....省略其他分支*)###如果变量的值不是以上的值,则执行此程序3;;;esac应用实例案例1:当命令行参数是1时,输出周一,是2是输出周二,其他情况......
  • 实用指令_大数据shell_变量_设置位置参数
    位置参数当我们执行一个shell脚本时,如果希望获取命令行的参数信息,就可以使用位置参数变量比如:/myshell.sh100200,这个就是一个执行shell的命令行,可以在myshell脚本中获取到参数信息基本语法$n(功能描述:n为数字,$0代表命令本身,$1-$9代表第一到第九个参数,十以上的参数,需......