源自Bash脚本,每个脚本都有主要功能

源自Bash脚本,每个脚本都有主要功能

我正在使用 Bash 4.4.20。我通常在每个 bash 脚本中都有 main 函数。如果我想从另一个 bash 脚本中的另一个函数获取此脚本,这会与两个脚本中的主函数定义冲突吗?

#A.sh
main() {
SomeFunction 
}

SomeFunction(){
. B.sh
}

main "$@"
#B.sh

main(){
echo Hi
}

main "$@"

有没有不重命名main函数的解决方案?

答案1

另一个脚本将重新定义main(),是的。尽管在这种特殊情况下,我不确定这是否重要,因为main()当脚本 B 重新定义函数时,脚本 A 正在运行。我怀疑 shell 是否允许重新定义来改变已经运行的函数的行为。

也就是说,给定这些脚本:

$ cat a.sh
main() {
    echo a1
    . ./b.sh
    echo a2
}
main "$@"

$ cat b.sh
main() {
    echo b
}
main "$@"

使用任何 shell运行a.sh我可以找到打印a1, b, a2.如果再次a.sh调用main,那么它当然会得到新的行为。

但即使在这里并不重要,像这样动态地重新定义函数至少会让人感到困惑。

更好的问题是,为什么你需要来源首先脚本B?将 B 作为要通过采购加载的函数集合(某种库)似乎更清楚;或者将其作为一个独立的实用程序,作为常规程序调用,而不是来源。

在第一种情况下,A 将根据需要显式调用 A 中定义的函数。

答案2

简答 是的

长答案 如果您获取脚本,则与执行脚本相同,但在您自己的 shell 进程中。因此环境变量、函数名称等是共享的。看https://superuser.com/a/176788/222230

相关内容