bash - 相当于 Python 的 `if __name__ == ' __main_ _'` 的 bash 是什么?

标签 bash

在 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,因为它看起来比 $_(link1link2)更健壮。


这是我用两个 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/

相关文章:

macos - 无法清除 OS X El Capitan 中的 Bash 终端历史记录

arrays - For 循环中奇怪的 Bash 变量赋值行为

linux - 在 BASH 中使用 mv 将时间戳添加到文件名

linux - 当父脚本以交互方式/通过终端调用时,bash 子脚本与父脚本一起退出,但在非交互方式/通过 cron 调用时则不会

linux - 你将如何制作一个 shell 脚本来监控挂载和日志问题?

regex - sed 或 perl 仅当第一个内部单词匹配时才删除外部括号

linux - 使用 grep、awk、tr、sed 在 linux 中解析输出

linux - 如何在bash脚本中异步监听?

linux - Bash:当不存在时出现意外的 "("

bash - 确定远程机器上的空闲线程数