Bash 函数/变量多依赖项导入(多次调用以导入)
我有多个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命令所在的位置一样。因此,所有变量和函数都将定义两次,这可能无关紧要,因为最后一次调用就是您将得到的调
base.sh
roles.sh
collect.sh
role.sh
和collect.sh
importbase.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”]
在寻源脚本中。