【发布时间】:2018-01-30 07:52:49
【问题描述】:
我尝试在 shellscript 上使用 python 练习if __name__ == "__main__":。
示例脚本如下:
a.sh:
#!/bin/bash
filename="a.sh"
function main() {
echo "start from $0"
echo "a.sh is called"
source b.sh
bfunc
}
[[ "$0" == "${filename}" ]] && main
b.sh:
#!/bin/bash
filename="b.sh"
function main() {
echo "start from $0"
echo "b.sh is called"
}
function bfunc() {
echo "hello bfunc"
}
[[ "$0" == "${filename}" ]] && main
您可以使用bash a.sh 调用它。
如果你打电话给bash a.sh,你会得到如下信息:
start from a.sh
a.sh is called
hello bfunc
这是我的问题。
如何在不使用$0 的情况下获取文件名本身?
我不想直接写文件名,即我想将文件名值传递给${filename}。
不知道是上面python实践的看链接:What does if __name__ == "__main__": do?
如何检查b.sh 是从命令行启动还是通过包含从a.sh 执行?
【问题讨论】:
-
旁注:
function关键字在 bash 脚本中是多余的,而且它会使您的脚本无缘无故地与 POSIX 不兼容。我会删除它。 -
我认为,
$0是最简单的方法。为什么你不喜欢它? -
@ViktorKhilin:
$0指的是正在执行的程序,但他想指的是当前文件。如果当前文件包含在另一个脚本中,$0将给出错误的结果。 -
@ViktorKhilin,最简单,但不可靠。见BashFAQ #28。