如何确定脚本本身中的Bash脚本文件的名称?

就像如果我的脚本在文件runme.sh中,那么我如何让它显示“您正在运行runme.sh”消息而不硬编码?


当前回答

这对./self.sh, ~/self.sh, source self.sh, source ~/self.sh很有效:

#!/usr/bin/env bash

self=$(readlink -f "${BASH_SOURCE[0]}")
basename=$(basename "$self")

echo "$self"
echo "$basename"

演职员:我综合了多个答案才得到这个答案。

其他回答

如果不带路径,可以使用${0##*/}

$BASH_SOURCE在获取脚本时给出正确答案。

然而,这包括路径,所以只获得脚本文件名,使用:

$(basename $BASH_SOURCE) 

回显“您正在运行$0”

由于一些注释询问没有扩展名的文件名,这里有一个示例如何完成:

FileName=${0##*/}
FileNameWithoutExtension=${FileName%.*}

享受吧!

这对./self.sh, ~/self.sh, source self.sh, source ~/self.sh很有效:

#!/usr/bin/env bash

self=$(readlink -f "${BASH_SOURCE[0]}")
basename=$(basename "$self")

echo "$self"
echo "$basename"

演职员:我综合了多个答案才得到这个答案。