如何确定脚本本身中的Bash脚本文件的名称?
就像如果我的脚本在文件runme.sh中,那么我如何让它显示“您正在运行runme.sh”消息而不硬编码?
如何确定脚本本身中的Bash脚本文件的名称?
就像如果我的脚本在文件runme.sh中,那么我如何让它显示“您正在运行runme.sh”消息而不硬编码?
当前回答
echo "$(basename "`test -L ${BASH_SOURCE[0]} \
&& readlink ${BASH_SOURCE[0]} \
|| echo ${BASH_SOURCE[0]}`")"
其他回答
这些答案对于它们所陈述的情况是正确的,但如果您使用'source'关键字从另一个脚本运行脚本(以便它在同一个shell中运行),仍然存在一个问题。在本例中,您将获得调用脚本的$0。在这种情况下,我认为不可能获得脚本本身的名称。
这是一个边缘情况,不应该太当真。如果你直接从另一个脚本运行脚本(没有'source'),使用$0可以工作。
$0将给出您正在运行的脚本的名称。创建一个脚本文件并添加以下代码
#!/bin/bash
echo "Name of the file is $0"
然后像这样从终端运行
./file_name.sh
回显“您正在运行$0”
由于一些注释询问没有扩展名的文件名,这里有一个示例如何完成:
FileName=${0##*/}
FileNameWithoutExtension=${FileName%.*}
享受吧!
$BASH_SOURCE在获取脚本时给出正确答案。
然而,这包括路径,所以只获得脚本文件名,使用:
$(basename $BASH_SOURCE)