如何确定脚本本身内的 Bash 脚本文件的名称?
就像我的脚本在文件中一样runme.sh,那么我如何让它显示“您正在运行 runme.sh”消息而不进行硬编码?
runme.sh
me=basename "$0"
basename "$0"
要阅读符号链接1,这通常不是您想要的(您通常不想以这种方式混淆用户),请尝试:
me="$(basename "$(test -L "$0" && readlink "$0" || echo "$0")")"
IMO,这会产生令人困惑的输出。“我运行了 foo.sh,但它说我在运行 bar.sh!?一定是一个错误!” 此外,使用不同名称的符号链接的目的之一是根据它的名称提供不同的功能(想想某些平台上的 gzip 和 gunzip)。
1也就是说,要解析符号链接,以便当用户执行foo.sh实际上是指向 的符号链接时bar.sh,您希望使用解析后的名称bar.sh而不是foo.sh.
foo.sh
bar.sh