Bash 函数/变量多依赖项导入(多次调用以导入)

Bash 函数/变量多依赖项导入(多次调用以导入),bash,Bash,我有多个bash脚本文件 base.sh roles.sh collect.sh role.sh和collect.shimportbase.sh 我有另一个文件actions.sh,该文件导入(源)了role.sh和collect.sh base.sh中的函数和变量会发生什么变化?(它们实际上需要导入两次) 如何检查导入是否正确完成 Source的工作原理就像文件中的行被精确复制到Source命令所在的位置一样。因此,所有变量和函数都将定义两次,这可能无关紧要,因为最后一次调用就是您将得到的调

我有多个bash脚本文件

base.sh
roles.sh
collect.sh
role.sh
collect.sh
import
base.sh

我有另一个文件
actions.sh
,该文件导入(源)了
role.sh
collect.sh

  • base.sh
    中的函数和变量会发生什么变化?(它们实际上需要导入两次)

  • 如何检查导入是否正确完成


  • Source的工作原理就像文件中的行被精确复制到Source命令所在的位置一样。因此,所有变量和函数都将定义两次,这可能无关紧要,因为最后一次调用就是您将得到的调用,除非您在
    role
    collect
    之间有更改某些内容的内容,并且该内容将被覆盖

    例如,如果
    base
    中的某些内容根据环境的不同而表现不同,并且两个脚本在寻源之前设置了不同的环境,那么这可能会导致意外的行为(第二个源重写)

    即使只是为了节省开销,您也可以使用以下内容包装整个
    base

    [ -n "$BASE_IMPORT" ] && return
    
    ...
    ...
    
    BASE_IMPORTED=1
    

    因此,您可以防止在同一环境中进行双重寻源(而无需显式取消设置变量)。

    源的工作原理与文件中的行被精确复制到源命令所在的位置一样。因此,所有变量和函数都将定义两次,这可能无关紧要,因为最后一次调用就是您将得到的调用,除非您在
    role
    collect
    之间有更改某些内容的内容,并且该内容将被覆盖

    例如,如果
    base
    中的某些内容根据环境的不同而表现不同,并且两个脚本在寻源之前设置了不同的环境,那么这可能会导致意外的行为(第二个源重写)

    即使只是为了节省开销,您也可以使用以下内容包装整个
    base

    [ -n "$BASE_IMPORT" ] && return
    
    ...
    ...
    
    BASE_IMPORTED=1
    

    因此,您可以防止在同一环境中出现双重源代码(无需显式取消设置变量)。

    导入是否意味着
    源代码
    ?是源代码/base.sh导入是否意味着
    源代码
    ?是源代码/base.sh如何检查导入是否正常或失败?@user3541631这是一个完整的问题,取决于您所说的“失败”是什么意思。如果源代码不应该提供输出,则可以捕获
    stderr
    res=$(source base.sh 2>&1)
    ,并检查
    $res
    是否为空,以查看是否打印了任何错误。如果文件不是空的found@user3541631然后不会设置
    BASE\u IMPORT
    ,因此您可以测试
    [-n“$BASE\u IMPORT”]
    在寻源脚本中。如何检查导入是否正常或失败?@user3541631这是一个完整的问题,取决于您所说的“失败”。如果源代码不应该提供输出,则可以捕获
    stderr
    res=$(source base.sh 2>&1)
    ,并检查
    $res
    是否为空,以查看是否打印了任何错误。如果文件不是空的found@user3541631然后不会设置
    BASE\u IMPORT
    ,因此您可以测试
    [-n“$BASE\u IMPORT”]
    在寻源脚本中。