在 Bash 中,我希望能够获取脚本并执行文件。 Bash 等同于 Python 的 if __name__ == '__main__'
是什么?
我没有在 Stackoverflow 上找到关于此主题的现成问题/解决方案(我怀疑我的提问方式与现有问题/答案不匹配,但这是我能想到的最明显的方式根据我的 Python 经验来表述这个问题)。
附注关于 possible duplicate question (如果我有更多时间,我会写一个更短的回复):
linked to question询问“如何检测是否正在获取脚本”,但此问题询问“如何创建既可以获取又可以作为脚本运行的 bash 脚本?”。这个问题的答案可能会使用上一个问题的某些方面,但有如下额外要求/问题:
-
<
- 一旦您检测到脚本正在运行而不是源代码,那么执行脚本的规范方式是什么(将它放在一个函数中?或者可能只是将它放在 if 语句之后?如果您将它放在 if 语句之后,它会有副作用吗?
- 我在 Bash 上发现的大多数谷歌搜索都没有涵盖这个主题(一个可以获取和执行的 bash 脚本)实现这个的规范方法是什么?该主题是否因为气馁或不好做而未涵盖?有陷阱吗?
最佳答案
解决方法:
if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
main "$@"
fi
我添加这个答案是因为我想要一个以模仿 Python 的 if __name__ == '__main__'
但在 Bash 中的风格编写的答案。
关于 BASH_SOURCE
与 $_
的用法。我使用 BASH_SOURCE
,因为它看起来比 $_
(link1、link2)更健壮。
这是我用两个 Bash 脚本测试/验证的示例。
带有 xyz()
函数的 script1.sh:
#!/bin/bash
xyz() {
echo "Entering script1's xyz()"
}
main() {
xyz
echo "Entering script1's main()"
}
if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
main "$@"
fi
尝试调用函数 xyz()
的 script2.sh:
#!/bin/bash
source script1.sh
xyz
关于bash - 相当于 Python 的 `if __name__ == ' __main_ _'` 的 bash 是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29966449/