您的位置:首页 > 运维架构 > Shell

获取bash文件所在的目录绝对路径以及获取函数方法名称

2017-12-14 20:20 627 查看
原网址链接:https://stackoverflow.com/questions/59895/getting-the-source-directory-of-a-bash-script-from-within

一个非常好用又简单的方法,不管是软连接还是硬链接都可以获取

SOURCE="${BASH_SOURCE[0]}"
while [ -h "$SOURCE" ];
do
DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )"
SOURCE="$(readlink "$SOURCE")"
[[ $SOURCE != /* ]] && SOURCE="$DIR/$SOURCE"
done
DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )"


${BASH_SOURCE[0]}可以获取文件目录,接着判断其是否为软连接,如果是的话,获取其绝对路径。

如果不是软连接目录,可以直接用以下方式来获取获取脚本的完整目录名称。

DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"


另外一个比较好用的变量FUNCNAME,是用于获取函数名称,注意,他是一个数组而非字符串,其中数组的第一个元素为当前函数的名称

#!/bin/bash

function test_func(){
echo "Current $FUNCNAME, \$FUNCNAME => (${FUNCNAME[@]})"
another_func
echo "Current $FUNCNAME, \$FUNCNAME => (${FUNCNAME[@]})"}

function another_func(){
echo "Current $FUNCNAME, \$FUNCNAME => (${FUNCNAME[@]})"}

echo "Out of function, \$FUNCNAME => (${FUNCNAME[@]})"
test_func
echo "Out of function, \$FUNCNAME => (${FUNCNAME[@]})"


输出结果:

Out of function, $FUNCNAME => ()
Current test_func, $FUNCNAME => (test_func main)
Current another_func, $FUNCNAME => (another_func test_func main)
Current test_func, $FUNCNAME => (test_func main)
Out of function, $FUNCNAME => ()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  bash