如何获取 shell 脚本自身文件名?

2016-08-30 17:47:17 +08:00
 Devin
比如脚本 abc.sh ,在这个脚本里,如何获取自身文件名 abc.sh
13040 次点击
所在节点    Linux
22 条回复
ayanmw
2021-03-04 20:35:52 +08:00
弱弱的 提一句: caller
bash 有一个命令 caller ,可以获得 调用堆栈的 line filename
所以 用 caller , 基本上 就 OK 了

```shell
getFileName(){
fname=$(echo $(caller)|cut -d ' ' -f 2-)
if test -f $fname;then
link=$(readlink $fname);
if test -z "$link";then echo $(basename $fname);return 0;fi
echo $(basename $(readlink $fname));
return 0
fi
echo $fname
}

echo fileName=$(getFileName)

```
ayanmw
2021-03-04 20:59:14 +08:00
@ayanmw 又整理了一下:
```bash

getFileName(){
call=$(caller)
if test -z "$call";then
echo $0
return 0
fi
fname=$(echo $(caller)|cut -d ' ' -f 2-)
if test -f $fname;then
link=$(readlink $fname);
if test -z "$link";then
if test -f $fname;then
echo $(basename $fname);return 0;
fi
echo $fname;return 0;
fi
echo $(basename $(readlink $fname));
return 0
fi
echo $fname
}

echo fileName=$(getFileName)

```

函数可以在任意文件, 你只需要 `. libFunc.sh` 或者 `source libFunc.sh` 包含这个函数, 在任何地方调用
`echo fileName=$(getFileName)` 都可以获得 你当前所在的文件.

caller 这个 bash 内置方法, 终于解决了我多年的疑问了.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/302728

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX