我尝试在shell脚本中使用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练习是什么,请参见链接:if __name__ == "__main__"是做什么的? 如何检查
b.sh
是从命令行启动还是被包含在a.sh
中执行?
$0
是最简单的方法。你为什么不喜欢它呢? - Viktor Khilin$0
指的是执行程序,但他想要指向当前文件。如果当前文件是从另一个脚本中包含的,则$0
将会给出错误的结果。 - clemens