如何确定脚本本身中的Bash脚本文件的名称?
就像如果我的脚本在文件runme.sh中,那么我如何让它显示“您正在运行runme.sh”消息而不硬编码?
如何确定脚本本身中的Bash脚本文件的名称?
就像如果我的脚本在文件runme.sh中,那么我如何让它显示“您正在运行runme.sh”消息而不硬编码?
当前回答
DIRECTORY=$(cd `dirname $0` && pwd)
我从另一个堆栈溢出问题得到了上面,Bash脚本可以告诉它存储在什么目录中吗?,但我认为它对这个话题也很有用。
其他回答
回显“您正在运行$0”
这对./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"
演职员:我综合了多个答案才得到这个答案。
以下是我从Dimitre Radoulov的回答中得到的灵感(顺便说一下,我给他的回答投了赞)。
script="$BASH_SOURCE"
[ -z "$BASH_SOURCE" ] && script="$0"
echo "Called $script with $# argument(s)"
不管你如何调用你的脚本
. path/to/script.sh
or
./path/to/script.sh
$0将给出您正在运行的脚本的名称。创建一个脚本文件并添加以下代码
#!/bin/bash
echo "Name of the file is $0"
然后像这样从终端运行
./file_name.sh
由于一些注释询问没有扩展名的文件名,这里有一个示例如何完成:
FileName=${0##*/}
FileNameWithoutExtension=${FileName%.*}
享受吧!